info@icroute.com1LD3320开发手册ICRoute用声音去沟通VUI(VoiceUserInterface)Web::021-68546025Mail:info@icroute.cominfo@icroute.com2目录一.简介...................................................................................3二.寄存器操作.......................................................................3三.寄存器介绍.......................................................................5四.驱动程序.........................................................................101.芯片复位...........................................................................102.语音识别...........................................................................113.声音播放...........................................................................22五.补充说明.........................................................................30附录A测试版电路原理图..................................................32info@icroute.com3一.简介LD3320芯片是一款“语音识别”专用芯片。该芯片集成了语音识别处理器和一些外部电路,包括AD、DA转换器、麦克风接口、声音输出接口等。本芯片不需要外接任何的辅助芯片如Flash、RAM等,直接集成在现有的产品中即可以实现语音识别/声控/人机对话功能。并且,识别的关键词语列表是可以任意动态编辑的。本文档介绍如何编写程序实现芯片的功能。为更好地理解本文档内容,建议用户先仔细阅读《LD3320数据手册》。二.寄存器操作本芯片的各种操作,都必须通过寄存器的操作来完成。比如设置标志位、读取状态、向FIFO写入数据等。寄存器读写操作有4种方式,即并行方式(软、硬)和串行SPI方式(软、硬)。可参考文档《LD3320并行串行读写辅助说明》。1.并行方式第46脚(MD)接低电平时按照此方式工作。写和读的时序图如下:P0~P7CSB*WRB*A0AddressData图1并行方式写时序info@icroute.com4P0~P7CSB*WRB*A0AddressDataValidRD*图2并行方式读时序由时序图可以看到,A0负责通知芯片是数据段还是地址段。A0为高时是地址,而A0为低时是数据。发送地址时CSB*和WRB*必须有效,写数据时同样CSB*和WRB*必须有效,而读数据时CSB*和RDB*必须有效。2.串行SPI方式第46脚(MD)接高电平,且第42腿(SPIS*)接地时按照此方式工作。写和读的时序图如下:图3SPI方式写时序写的时候要先给SDI发送一个“写”指令(04H),然后给SDI发送8位寄存器地址,再给SDI发送8位数据。在这期间,SCS*必须保持在有效(低电平)。info@icroute.com5图4SPI方式读时序写的时候要先给SDI发送一个“读”指令(05H),然后给SDI发送8位寄存器地址,再从SDO接受8位数据。在这期间,SCS*必须保持在有效(低电平)。三.寄存器介绍寄存器大部分都是有读和写的功能,有的是接受数据的,有的是设置开关和状态的。寄存器的地址空间为8位,可能的值为00H到FFH。但是除了在本文档里介绍的寄存器,其他大部分为测试或保留功能的寄存器,请用户参考本文档的用法。先介绍一些术语:ASR:自动语音识别技术(AutomaticSpeechRecognition)。FIFO:英文FirstInFirstOut的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单。(*)LD3320芯片内部有2个FIFO,分别是:FIFO_EXTFIFO_DATAFIFO_DATA主数据处理FIFO缓存器,ASR或者MP3的主数据区FIFO_EXT语音识别添加关键词用FIFO缓存器MCU:本文档中专指外部电路板的主控芯片,对LD3320芯片进行控制的微处理器。DSP:本文档中专指本芯片LD3320内部的专用DSP,实现语音识别和语音播放的算法。info@icroute.com6寄存器的详细说明如下:编号(16进制)说明01FIFO_DATA数据口02FIFO中断允许第0位:允许FIFO_DATA中断;第2位:允许FIFO_EXT中断;05FIFO_EXT数据口06(只读)FIFO状态第6位:1表示忙,不能写所有FIFO。第3位:1表示FIFO_DATA已满,不能写。08清除FIFO内容(清除指定FIFO后再写入一次00H)第0位:写入1→清除FIFO_DATA第2位:写入1→清除FIFO_EXT11时钟频率设置117写35H对LD3320进行软复位(SoftReset)写48H可以激活DSP;写4CH可以使DSP休眠,比较省电。19时钟频率设置21B时钟频率设置31CADC开关控制写00HADC不可用写09HReserve保留命令字,具体使用按照给出的参考程序代码使用。写0BH麦克风输入ADC通道可用(芯片管脚MIC_P,MIC_N,MBS,管脚9,10,12)写07H立体声Line-in输入ADC通道可用(芯片管脚LIN_L,LIN_R,管脚13,14)写23HMonoLine-in输入ADC通道可用(芯片管脚MONO,管脚11)1D时钟频率设置41EADC专用控制,应初始化为00H20FIFO_DATA上限低8位(UpperBoundaryL)21FIFO_DATA上限高8位(UpperBoundaryH)22FIFO_DATA下限低8位(LowerBoundaryL)23FIFO_DATA下限高8位(LowerBoundaryH)24FIFO_DATAMCU水线低8位(MCUwatermarkL)info@icroute.com725FIFO_DATAMCU水线高8位(MCUwatermarkH)26FIFO_DATADSP水线低8位(DSPwatermarkL)27FIFO_DATADSP水线高8位(DSPwatermarkH)29中断允许(可读写)第2位:FIFO中断允许,1表示允许;0表示不允许。第4位:同步中断允许,1表示允许;0表示不允许。2B中断请求编号(可读写)第4位:读取值为1表示语音识别有结果产生;MCU可清零。第2位:读取值为1表示芯片内部FIFO中断发生。MP3播放时会产生中断标志请求外部MCU向FIFO_DATA中Reload数据。第3位:读取值为1表示芯片内部已经出现错误。值得注意的是:如果在中断响应时读到这位为1,需要对芯片进行重启Reset,才可以继续工作。33MP3播放用设置开始播放时写入01H,播放完写入00H。35ADC增益,或可以理解为麦克风(MIC)音量。测试版工作时使用的设置是43H。可以设置为00H-7FH。建议设置值为40H-55H:值越大代表MIC音量越大,识别启动越敏感,但可能带来更多误识别;值越小代表MIC音量越小,需要近距离说话才能启动识别功能,好处是对远处的干扰语音没有反应。37语音识别控制命令下发寄存器写04H:通知DSP要添加一项识别句。写06H:通知DSP开始识别语音。在下发命令前,需要检查B2寄存器的状态。38FIFO_EXT上限低8位(UpperBoundaryL)3AFIFO_EXT上限高8位(UpperBoundaryH)3CFIFO_EXT下限低8位(LowerBoundaryL)3EFIFO_EXT下限高8位(LowerBoundaryH)40FIFO_EXTMCU水线低8位(MCUwatermarkL)42FIFO_EXTMCU水线高8位(MCUwatermarkH)44FIFO_EXTDSP水线低8位(DSPwatermarkL)46FIFO_EXTDSP水线高8位(DSPwatermarkH)79时钟频率设置581耳机左音量Bit7,6,0:Reserved;Bit[5-1]:音量大小:数值越小,代表声音越大;数值越大,代表声音越小;本寄存器设置为00H为最大音量。调节本寄存器后,设置寄存器87H.Bit1=1,可以使调节音量有效。info@icroute.com883耳机右音量Bit7,6,0:Reserved;Bit[5-1]:音量大小:数值越小,代表声音越大;数值越大,代表声音越小;本寄存器设置为00H为最大音量。调节本寄存器后,设置寄存器87H.Bit0=1,可以使调节音量有效。85内部反馈设置初始化时写入52H播放MP3时写入5AH(改变内部增益)其中Bit[1,0]为混音器反馈电阻设置00:60kohm01:45kohm10:30kohm11:15kohm目前程序中设为30Kohm87模拟电路控制MP3播放初始化时写FFHBit3:喇叭音量调节激发(见8E寄存器)Bit1:耳机左音量调节激发(见81寄存器)Bit0:耳机右音量调节激发(见83寄存器)89模拟电路控制初始化时写03HMP3播放时写FFH8D内部增益控制初始化时写入FFH8E喇叭输出音量Bit7,6,1,0:Reserved;Bit[5-2]:音量大小,共16等级:数值越小,代表声音越大;数值越大,代表声音越小;本寄存器设置为00H为最大音量。调节本寄存器后,设置寄存器87H.Bit3=1,可以使调节音量有效。8FLineOut选择初始化时写入00HB2ASR:DSP忙闲状态0x21表示闲,查询到为闲状态可以进行下一步ASR动作B3ASR:VadPara本函数为打开或关闭“语音端点检测”功能。如果将该功能关闭,也就是参数设置为’0’,则所有的语音数据都会被用来执行语音识别的搜索运算。而如果将该功能打开,也就是参数设置为大于’0’的数值,则所有的语音数据都会先经过是“语音段”还是“静噪音段”的检测,只有语音段被用来执行语音识别的搜索运算。Default:0x12H0–关闭语音段检测功能,info@icroute.com9数值范围:1~80–打开语音段检测功能。数值越小越灵敏,但容易误判;数值越大越不灵敏,但误判的可能减少。建议数值的范围在10~40之间。原则是语音环境信噪比越大,可以采用越大一点的数值。调整本参数也会对识别距离产生影响,数值越小,越灵敏,距离越远。B4ASR:VadStart需要连续多长时间的语音才可以确认为是真正的语音开始。每1单位,10毫秒。Default:0x0FH,相当于150毫秒数值范围:8~80(相当于10~800毫秒)B5ASR:VadSilenceEnd在语音检测到语音数据段以后,又检测到了背景噪音段,连续检测到多长时间的背景噪音段才可以确认为是真正的语音结束。每1单位,10毫秒。Default:0x3CH,十进制的60,相当于600毫秒数值范围:20~200(相当于200~2000毫秒)B6ASR:VadVoicemaxlength在语音检测到语音数据段以后,最长允许多长时间的语音识别。每1单位,100毫秒。Default:0x3CH,十进制的60,相当于6000毫秒=6秒钟数值范围:5~200(相当于500毫秒~20秒钟)B7ASR:PassFr