您的位置:首页 > 其它

一次DEBUG经历

2009-06-20 13:57 225 查看
不久前在项目中遇到一个BUG,解决的过程不算复杂,但能说明一些问题。

项目背景:

在项目中我负责的保全模块中(这个以后也写写),当用户开关保全以及设定条件被触发时使用音频解码通道播放一段G726格式音频。

相关硬件:HI3510 ,WM8731 相关软件:音频解码播放代码,WM8731 driver

问题描述:测试人员发现有时会出现无声现象。

解决过程:

1.怀疑编码不当导致解码通道操作错误,检查代码后排除。

2.仔细观察问题发生状况,发现问题有如下特点,如果该板在启动后无声,则一直无声,而如果启动时声音正常则运行过程中不会出现无声现象。初步定位到系统初始化阶段。

3.检查应用程序初始化过程,无果,怀疑DRIVER出现问题。

4.用示波器观察HI3510 I2S输出通道,发现在有声和无声的情况下I2S总线上均有正常数据,怀疑驱动有时将WM8731初始化为静音,询问驱动开发人员得知静音接口未暴露给应用层,猜测错误。

5.因为I2S数据一直正确,可以判定应用层音频解码无误,问题出在DRIVER,但编写驱动的同事较忙,而WM8731驱动并不复杂,索性自己检查。

6.仔细检查驱动代码,并无逻辑错误,仔细阅读DATASHEET,在一个不起眼的地方有如下一句:

it is recommendded that between changing any content of Digital Audio Interface or Sampling Control Register that the active bit is reset then set

对照驱动代码,正好忽略了这一点,而系统的驱动恰恰加载了两次,才造成了音频接口出错出现无声,在设置sample rate 的地方关掉接口然后再打开,一切OK。

结论:一个59页的DATASHEET,被忽略了的两行造就了这个BUG,在万事俱备的情况下,细节决定成败。为了避免这样的隐患,在做的过程中尽量细心,不放过任何一个细节,。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: