语音芯片JQ8400的使用心得

您所在的位置:网站首页 语音芯片引脚图 语音芯片JQ8400的使用心得

语音芯片JQ8400的使用心得

2024-01-20 05:04| 来源: 网络整理| 查看: 265

语音芯片介绍 模块特征(简要介绍)

1、支持MP3 WAV硬件解码 2、支持FAT文件系统 3、两线串口模式、一线串口模式 4、支持普通音乐播放器具有的功能如上一曲、下一曲、播放、暂停、停止、选曲等常用功能 5、支持智能组合播放,特定的文件夹里的歌曲组合,发送曲目名即可 6、30级音量调节 7、官方带有配套上位机,可以生成实现所需功能的传输指令

更新语音内容说明

JQ8400 语音模块选用的是 SOC 方案,集成了一个 16 位的 MCU,以及一个专门针对音频解码的 ADSP,采用硬解码的方式,更加保证了系统的稳定性和音质。小巧尺寸更加满足嵌入其它产品的需求。 SPI-flash(更换语音内容) 此芯片最大的优势在于能够灵活的更换 SPI-flash 内的语音内容,省去了传统语音芯片需要安装上位机更换语音的麻烦,SPI FLASH 直接模拟成 U 盘,跟拷贝 U 盘一样,非常方便。使得产品研发和生产变得便捷简单。一线串口控制模式、RX232 串口控制可选,为研发提供更多的选择性。USB 数据线连接模块,插上电脑,电脑会自动识别,像插入U盘一样,可以直接更换语音内容,语音文件命名方式有一定限制,程序也需要按这个格式编写。

模块引脚说明

JQ8400-FL的芯片引脚,还有带有TF的和有其它可控制的IO口 JQ8400-FL的芯片引脚,还有带有TF的和有其它可控制的IO口的芯片 芯片引脚说明 芯片引脚说明

二两线串口通信(一线串口通信见附件官方文档)

串口传输函数

void UART1_SendCode(u8 *DATA,u8 len) { USART_ClearFlag(USART1,USART_FLAG_TC); //发送之前清空发送标志 while(len--) { USART_SendData(USART1, *DATA++); while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束 } }

两线串口指定路径播放以下为它的驱动函数,支持中文和英文数字等组,建议文件夹名和文件名不要过长。建立两个文件夹,文件夹名为测试1,测试1内有文件夹2,文件夹2里有文件00002的音频。

/************************************************************************ 功能描述:播放任意路径下的的音频文件 入口参数:JQ8X00_Symbol:系统盘符,*DATA:需要播放的音频文件路径 返 回 值: none 其他说明:播放说明例 如 :/广告/小米手机.mp3,可以按如下格式 /广告* /小米*???,“广告*”代表前两个字为“广告的文件夹”,*为通配符 注意格式,下一个目录符号前要加*,如/测试1* /测试2* /00002*??? JQ_8x00_RandomPathPlay(JQ8X00_FLASH,"广告* /小米") 播放FLASH根目录下文件名为00001.mp3的音频,则传JQ_8x00_RandomPathPlay(JQ8X00_FLASH,"/00001"); **************************************************************************/ void JQ8x00_RandomPathPlay(JQ8X00_Symbol symbol,char *DATA) { uint8_t Buffer[52] ={0xaa,0x08}; uint8_t i,j; Buffer[2] = 1 + strlen(DATA) + 4; Buffer[3] = symbol; i = 4; while(*DATA) { Buffer[i++] = *DATA; DATA++; } Buffer[i++] = '*'; Buffer[i++] = '?'; Buffer[i++] = '?'; Buffer[i++] = '?'; for(j=0;j"/测试1*/测试2*/00002"}; //播放路径: 根目录->测试1->测试2 下文件名为00002的音频文件 JQ8x00_RandomPathPlay(JQ8X00_FLASH,Path_Buffer); //播放 根目录->测试1->测试2 下文件名为00002的音频文件

两线串口组合播放以下为它的驱动函数,组合播放是按文件名来组合,文件要求存储在“ZH”文件夹下,可以把要组合的文件名 称更改为两个字节的名称,一般建议用数字表示。如: 01.mp3,02.mp3,也可以用两个字母或一个汉字命名 。

/************************************************************************ 功能描述:组合播报函数 入口参数: *DAT:字符串指针,Len字符串长度 返 回 值: none 其他说明: 将需要播报的文件名放入数组中作为形参即可 **************************************************************************/ void JQ8x00_ZuHeBoFang(uint8_t *DATA,uint8_t Len) { u16 CRC_data=0,i = 3; uint8_t Buffer[ZH_MAX] ={0xaa,0x1b}; Buffer[2] = Len*2; //计算长度 CRC_data = CRC_data + 0xaa + 0x1b + Buffer[2]; while(Len--) { Buffer[i] = *DATA/10+0x30; //取出十位 CRC_data = CRC_data + Buffer[i]; i++; Buffer[i] = *DATA%10+0x30; //取出个位 CRC_data = CRC_data + Buffer[i]; i++; DATA++; } Buffer[i] = CRC_data; i++; JQ8x00_UART(Buffer,i); } //下面为播放函数 uint8_t ZH_Buffer[3] = {1,2,3}; JQ8x00_ZuHeBoFang(ZH_Buffer,3); //将ZH文件夹下名字为01 02 03的3个音频文件依次播放

芯片通信采用全双工串口通信; 波特率为 9600,数据位:8 ,停止位 1 位,检验位 N 通信格式 起始码-指令类型-数据长度(n)-数据 1-数据 n-和检验(SM) 指令码 :固定为 AA 指令类型 : 用来区分指令类型 数据长度 :指令中的数据的字节数 数据 :指令中的相关数据,当数据长度为 1 时,表示只有 CMD,没有数据位 和检验 :为之前所有字节之和的低 8 位,即起始码到数据相加后取低 8 位 鯦数据格式 :发送的数据或命令,高 8 位数据在前,低 8 位在后 协议约定 播放状态定义 :系统上电处于停止状态 00(停止) 01(播放) 02(暂停) 盘符定义: 切换盘符后处于停止状态 USB:00 SD:01 FLASH:02 NO_DEVICE:FF 音量:音量总共为 31 级,0-30 级,上电默认为 20 级 播放模式定义:上电默认为单曲停止

/************************************************************************ 功能描述:起始码-指令类型-数据长度-校验和 入口参数: MODE:模式 返 回 值: none 其他说明: 无数数据传入 **************************************************************************/ void JQ8x00_Command(UartCommand Command) { uint8_t Buffer[4] ={0xaa}; Buffer[1] = Command; //指令类型 Buffer[2] = 0x00; //数据长度 Buffer[3] = Buffer[0] + Buffer[1] + Buffer[2]; //校验和 JQ8x00_UART(Buffer,4); } /************************************************************************ 功能描述:起始码-指令类型-数据长度-数据-校验和 入口参数: *DAT:字符串指针,Len字符串长度 返 回 值: none 其他说明: **************************************************************************/ void JQ8x00_Command_Data(UartCommandData Command,uint8_t DATA) { uint8_t Buffer[6] ={0xaa}; uint8_t DataLen = 0; Buffer[1] = Command; //指令类型 if((Command != AppointTrack) && (Command != SetCycleCount) && (Command != SelectTrackNoPlay) && (Command != AppointTimeBack) && (Command != AppointTimeFast)) //只含一个数据指令 { Buffer[2] = 1; //数据长度 Buffer[3] = DATA; //数据 Buffer[4] = Buffer[0] + Buffer[1] + Buffer[2] + Buffer[3]; //校验和 DataLen = 5; } else //含两个数据指令 { Buffer[2] = 2; //数据长度 Buffer[3] = DATA/256; //数据 Buffer[4] = DATA%256; //数据 Buffer[5] = Buffer[0] + Buffer[1] + Buffer[2] + Buffer[3] + Buffer[4]; DataLen = 6; }

串口传输控制指令包含无数据的和多个数据的

typedef enum { CheckPlayState = 0x01, /*查询播报状态*/ Play = 0x02, /*播放*/ pause = 0x03, /*暂停*/ Stop = 0x04, /*停止*/ LastSong = 0x05, /*上一曲*/ NextSong = 0x06, /*下一曲*/ CheckOnelineDisksign = 0x09, /*查询当前在线盘符*/ CheckCurrentDisksign = 0X0A, /*查询当前播放盘符*/ CheckTotalTrack = 0x0C, /*查询总曲目*/ CurrentTrack = 0x0D, /*当前曲目*/ LastFloder = 0x0E, /*上一个文件夹目录*/ NextFloder = 0x0F, /*下一个文件夹目录*/ EndPlay = 0x10, /*结束播放*/ CheckFloderFirstTrack = 0x11, /*查询文件目录首曲目*/ CheckFloderAllTrack = 0x12, /*查询文件目录总曲目*/ AddVolume = 0x14, /*音量加*/ DecVolume = 0x15, /*音量减*/ EndZHPlay = 0X1C, /*结束组合播报*/ CheckSongShortName = 0x1E, /*查询歌曲短文件名*/ EndLoop = 0x21, /*结束复读*/ GetTotalSongTime = 0x24, /*获取当前曲目总时间*/ OpenPlayTime = 0x25, /*播放时间开发送*/ ClosePlayTime = 0x26, /*关闭播放时间发送*/ }UartCommand; //无数据的指令,起始码-指令类型-数据长度-校验和 typedef enum { AppointTrack = 0x07, /*指定曲目播放*/ SetCycleCount = 0x19, /*设置循环次数*/ SetEQ = 0X1A, /*EQ设置*/ SelectTrackNoPlay = 0x19, /*选曲不播放*/ GoToDisksign = 0X0B, /*切换指定盘符*/ SetVolume = 0x13, /*音量设置*/ SetLoopMode = 0x18, /*设置循环模式*/ SetChannel = 0x1D, /*设置通道*/ AppointTimeBack = 0x22, /*指定时间快退*/ AppointTimeFast = 0x23, /*指定时间快退*/ }UartCommandData; //包含多个数据的指令,起始码-指令类型-数据长度-数据1-...-校验和

盘符和循环模式选择指令

typedef enum { JQ8X00_USB = 0X00, /*UPANND*/ JQ8X00_SD = 0x01, /*SD*/ JQ8X00_FLASH = 0x02, /*FLASH*/ }JQ8X00_Symbol; //系统盘符 //循环模式选择在包含多个数据指令里面 // SetLoopMode = 0x18, /*设置循环模式*/ typedef enum { OverallCycle = 0X00, /*全盘循环 按顺序播放全盘曲目,播放完后循环播放*/ SingleCycle = 0x01, /*单曲循环 一直循环播放当前曲目*/ SingleStop = 0x02, /*单曲停止 播放完当前曲目一次停止*/ OverallRandom = 0X03, /*全盘随机 随机播放盘符内曲目*/ CatalogCycle = 0X04, /*目录循环 按顺序播放当前文件夹内曲目,播放完后循环播放,目录不包含子目录*/ CatalogRandom = 0x05, /*目录随机 在当前目录内随机播放,目录不包含子目录*/ CatalogTurnPlay = 0x06, /*目录顺序播放 按顺序播放当前文件夹内曲目,播放完后停止,目录不包含子目录*/ OverallTurnPlay = 0x07, /*全盘顺序播放 按顺序播放全盘曲目,播放完后停止*/ }LoopModeSelect; //循环模式选择 通过按键控制播放不同歌曲,使用的是原子的STM32ZET6的串口1,见附件文档

附件:JQ8400 注:参考官方所给文档进行编写的



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3