您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 语音识别芯片LD3320简明调试步骤
info@icroute.com1LD3320单芯片/非特定人/动态编辑识别列表语音识别芯片简明调试步骤ICRoute用声音去沟通VUI(VoiceUserInterface)Web::021-68546025Mail:info@icroute.cominfo@icroute.com2LD3320芯片或者M-LD3320模块正常工作的状态是:1)识别。采用给定的参考程序代码不作设置的修改,运行完RunASR()启动识别流程后,说出一个关键词语,在说完后等待大概600毫秒左右,芯片会送出一个中断提示一次识别流程结束。此时参考程序中的中断处理函数会被调用并去寄存器中读取识别结果。(关于600毫秒的结束时间请阅读“语音识别芯片LD3320高阶秘籍.pdf”第八节)如果用户不说话或者不插上麦克风,那么在默认设置下,等待60秒后芯片会送出一个中断提示一次识别流程结束。请阅读“开发手册.pdf”中关于B8寄存器的说明,这个时间可以最短设置到1秒。2)播放。能正确播放送入的MP3数据。用户应该首先调试电路以可以正确读写寄存器,和LD3320芯片进行通信。如果用户无法正确地进行读写寄存器的操作,请自行对照我们提供的原理图仔细检查硬件连接,包括焊接,电阻,晶振等方面。在调试时,一般检查顺序为:测量检查提供给LD3320芯片的电压是否正确:VDD,VDDIO,VDDA三路电源管脚都需要接入3.3v。两路地管脚需要正确接地。根据使用的传输方式(并口或者SPI),测量MD,SPIS管脚的电压是否正确。1.1.1.1.上电调试上电调试上电调试上电调试LD芯片重启后,LD_Reset,就是把(RSTB)管脚的电平拉低拉高后,管脚29,30会稳定地送出低电平,这个可以作为一个上电是否正常的检测。2.2.2.2.读写寄存器调试读写寄存器调试读写寄存器调试读写寄存器调试检查寄存器的读写是否正确:向可读写的寄存器写入某个数值,再读出来,用来检查寄存器读写是否正常。由于曾经有客户出现过每次读写都是在自己的总线上进行,没有真正touch到LD3320芯片。所以他每次先向一个寄存器写,再读出来,内容是完全正确,但实际上没有真正地读写进寄存器,而只是把刚刚写的数值再显示了出来。info@icroute.com3所以我们建议读写寄存器的序列如下:LD_reset();LD_ReadReg(0x6);LD_WriteReg(0x35,0x33);LD_WriteReg(0x1b,0x55);LD_WriteReg(0xb3,0xaa);打印并比较(LD_ReadReg(0x35));打印并比较(LD_ReadReg(0x1b));打印并比较(LD_ReadReg(0xb3));就是向3个寄存器先依次写数据,再依次读数据出来。作为比较。这样可以有效地验证读写寄存器是否正常。重要说明重要说明重要说明重要说明::::有一种调试方法是在单片机的IO管脚上连接LED,通过flashLED方式来提示信息,但是在实际中发现在一些型号的单片机上,这样的操作会导致单片机的IO管脚上的电压出现不稳定和波动,从而导致对LD3320的读写不正常。引起各种异常。所以建议开发者,最好在对LD3320进行调试期间,尽量避免使用FlashLED的方式进行调试,避免干扰。3.3.3.3.检查寄存器初始值检查寄存器初始值检查寄存器初始值检查寄存器初始值在LD_Reset后,写如下代码:LD_reset();打印(LD_ReadReg(0x06));打印(LD_ReadReg(0x06));打印(LD_ReadReg(0x35));打印(LD_ReadReg(0xb3));在Reset芯片后,直接读取4个寄存器。如果是这个顺序打印的值应该是如下的4个值008780FF其中第一次读寄存器06,只是相当于激活了芯片。值为00,或者为87,其中第二次读寄存器06,值为0x87,读寄存器35,值为0x80,读寄存器b3,值为0xff。检查分为两个步骤:a.用户可以上电后作一次LD_reset(),检查寄存器初值。b.随后在不掉电的情况下,再一次调用LD_reset(),再检查一次寄存器初值。info@icroute.com4如果系统稳定,那么无论何时调用LD_reset(),都会得到正确的寄存器初始值。如果发现第二次LD_reset()后的寄存器初始值不正确,那么说明系统的硬件连接/电源/主控单片机的IO电压等等硬件方面存在不稳定,导致LD3320的状态不稳定。一定需要把这个问题解决后才可能正确地运行整个识别流程。重要说明重要说明重要说明重要说明::::在完成第2步和第3步的工作后,一定要把所有向寄存器写数值的操作都去掉,再去从头完整地运行提供的语音识别实例源程序。因为这些对寄存器进行写操作的语句,是会影响到LD3320的状态,不应该出现在正确的流程中。4.4.4.4.在运行过程中检查寄存器的状态在运行过程中检查寄存器的状态在运行过程中检查寄存器的状态在运行过程中检查寄存器的状态如果前三步调试通过,但是运行程序不能完成识别功能,需要在运行过程中检查寄存器的状态。1)在完成LD_AsrAddFixed()函数后,检测0xBF寄存器的数值,看是否是0x312)在LD_AsrRun()函数中,在LD_WriteReg(0x37,0x06);delay(5);后,读取0xBF寄存器的数值是否不再是0x31,而是0x32~0x3a之间的某一个数值。如果这两个步骤检查不正确,可以先适当延长初始化函数中和LD_AsrRun()函数中各个delay的时间,看是否可以调整好。如果依然出现错误,一般还是读写寄存器不稳定造成寄存器设置不正确。可以从init函数开始,在每一句设置寄存器的语句后面,都去读取寄存器的数值,看是否设置正确。重要说明重要说明重要说明重要说明::::以下三个寄存器是在向其写入数据后,再去读取回来的数值并不是写入的数据。0x17,0x87,0x89。重要说明重要说明重要说明重要说明::::并口连接LD3320芯片的可能错误:在语音识别流程中,读写LD3320芯片的寄存器都正确,添加词条等工作时都显得很正常,但后面是不停地出中断,0x2B寄存器的bit[3]始终为1报告芯片内部错误,无法正常识别。请作如下检查,设置完LD_WriteReg(0x37,0x06);Delay(100);然后读取的0xBF寄存器是0x31。对这种错误,请仔细阅读本文档的第6节:“并口连接对于0x37寄存器的读写时序”。info@icroute.com55.5.5.5.重要提示重要提示重要提示重要提示目前一般主要碰到的硬件问题有:a.采用的主控单片机选型不当,不是工作在3.3v的单片机。LD3320芯片需要的工作电压是3.3v。要求控制LD3320芯片的单片机也工作在同一电压3.3v。IO管脚上,2.31v~3.3v代表逻辑“1”,一定要注意保证单片机的IO管脚输出到LD3320的管脚的电压不要超过不要超过不要超过不要超过3.3V3.3V3.3V3.3V!!!(包括所有LD3320与单片机进行连接的管脚:P0~P7,MD,A0,WRB/SPIS,RDB,CSB/SCS,RSTB,INTB)b.没有在p0~p7以及MD,RDB,CSB,INTB,A0,RSTB,WRB等控制端口上加上拉电阻,(参考“LD3320测试板原理图.pdf”中的设置)。对于某些主控单片机会导致寄存器读写正常而芯片工作状态不正常。c.晶振强度不够,用户换用有源晶振,或者缩短晶体到芯片管脚的连线d.焊接不可靠。e.电源设计不合理,诸如:没有采用LDO等稳压芯片保证稳定的3.3v工作环境;采用了诸如PC机USB端口直接取电导致电压会出现过低;稳压电路设计不合理导致单片机和LD3320工作后电压/电流出现比较大的变化。f.有开发者使用某型号单片机的IO端口输出给MD管脚提供高电平来进入SPI模式。但是实际测量后发现电压只有1.7~1.9V,会导致芯片在SPI模式下读写寄存器不正常。于是直接把MD管脚接入3.3v,芯片工作正常。目前碰到的软件时序问题有:1.并口时序用户使用的主控MCU没有独立的硬件并行读写端口(WR,RD)信号,是自己在IO口上编写程序来实现并口读写的时序。用户需要调试并行的时序,来保证读写寄存器的稳定。比如是否需要增加NOP,在给/WR和/RD信号之前留下足够的时间锁存数据。info@icroute.com62.SPI时序a.仔细阅读“LD3320并行串行读写辅助说明.pdf”中的SPI模拟程序,LD3320芯片要求每次在通过SPI方式读写寄存器时,都需要先传送一个命令字。b.如果用户使用硬件SPI端口,需要先把SPI端口的时钟频率降到最低进行调试,调试通过后,可以逐步提高时钟频率进行尝试。c.如果用户使用硬件SPI端口,当需要用户自己通过IO口来进行SPI的选中(LD3320芯片的SCS管脚)时,一定要注意每次对LD3320芯片进行时,都需要先把SCS拉低,再拉高。而不是简单地把SCS一致拉低。同时,要注意在拉低SCS后,增加几个nop,再启动单片机的硬件SPI端口进行读写,保证时序的稳定性。d.如果用户使用软件模拟SPI程序,当读写出现不正常时,可以在模拟程序中有nop和delay的地方增加nop的数目,来保证SPI的时序稳定。e.使用软件模拟SPI程序时,是在SDCK下跳沿之前增加NOP,这是因为LD3320芯片的SPI模式是下跳沿有效。开发者在移植这个模拟程序时,要注意不要改变模拟程序的时序。目前碰到的软件编程问题有:提供的参考程序源代码,是完全可以稳定运行识别和播放的源代码。相当于LD3320的驱动。开发者在没有调试通过以前,请一定不要修改不要修改不要修改不要修改提供程序中的任何对于寄存器的读写操作!如果用户没有搭建读写flash的硬件平台,只是想实现语音识别功能,可以把参考程序中对于PlaySound()函数的调用注释掉就可以了。参考程序中各个函数的逻辑功能,在“开发手册.pdf”中都有详细介绍和说明,用户应该先仔细阅读“开发手册”,再来阅读参考程序。或者向info@icroute.com发邮件索要当前最新版本的参考程序。用户选用自己的晶振并连接到LD3320芯片后,应该根据提供的参考程序修改LDChip.h中“#defineCLK_IN”的数值,将该数值修改为用户使用的晶振频率,比如“8”或者“22.1184”等,以匹配用户的晶振频率。6666.并口连接情况下对于并口连接情况下对于并口连接情况下对于并口连接情况下对于0x370x370x370x37寄存器的读写时序寄存器的读写时序寄存器的读写时序寄存器的读写时序0x37寄存器是一个特殊的寄存器,通过设置0x37寄存器,来启动芯片内部的语音识别运算模块。info@icroute.com7当用户使用并口方式和芯片连接,并且不是使用主控MCU的硬件并口设置,而是使用自己写的并口读写时序时,一定要注意对于0x37寄存器进行写数据设置时,需要保证写的速度足够快。否则可能会出现时序错误的风险。在语音识别流程中,0x37寄存器是控制命令入口,0xb2寄存器是内部忙闲的状态寄存器,一些内部状态将由0xbf寄存器报告出来在这个流程中,0x37寄存器实际上有二重功能,写该寄存器,1).唤醒芯片内部工作,2).将值送进去选择哪项工作。当调用LD_WriteReg(0x37,0x06);时,先把0x37这个寄存器地址写入了芯片,此时已经唤醒了芯片内部的语音识别模块,需要立即把命令字(0x06)传入芯片,否则就会造成语音识别模块接受不到该命令字,造成该语句设置失效。一般的表现就是在LD_WriteReg(0x37,0x06);后读取0xBF的数值没有按照预期进行变化。重温一下LD3320的并口写时序图:P0~P7CSB*WRB*A0AddressData0xb2寄存器设置为0x21,LD3320进入休眠状态ASRInit设置0x37为4,唤醒芯片添加词条工作添加词条准备设置
本文标题:语音识别芯片LD3320简明调试步骤
链接地址:https://www.777doc.com/doc-5271742 .html