📄 record.txt
字号:
WM8782驱动调试记录
张东
2008-4-22
驱动原理:
模拟信号从MIC IN进来,通过ADC转换成PCM信号,通过IMX27的AUDIOMAX使外部的SSI2与内部的SSI1相连接,使PCM信号发送到CPU的SSI里的FIFO,传到一定数量之后就通过DMA通道发送到内存里。
测试情况:
发生读写错误,通过 cat /proc/dma 查看到DMA通道已经打开,但是没有数据通过。为什么会这样呢?现在的问题是读不到数据,于是就用示波器测一下CPU传过来的时钟有没有传过来。(补充一下:WM8782使用slave模式,因此BCLK和FS由CPU提供),可是没有检测到时钟信号,通过查看mx27_i2s_master_mode_config(void),发现配置不对,通过查看MX27的spectifation,修改好后,可以看到时钟信号。运行测试代码,发现录制10S的,才一秒就结束了,而且录制声音也听不到。
还是时钟上有问题,通过查看WM8782的文档,对BCLK和FS以及DOUT进行研究,对BCLK进行相应的分频,实现BCLK达到1.04MHZ,FS=8kHz,实现可以录10S, cat /proc/interrupts 看到 33: CPU:261 - ALSA RX DMA,但是还是不能听到录的声音.
暂时想不出问题的所在,不知道是CPU中的SSI出现问题,还是WM8782没有工作。于是用MASTER模式来试试看,结果工作正常。那在SLAVE模式下,问题就一定出现在SSI上了,那些配置没有完全搞好,再次查看WM8782的文档,发现在SLAVE模式下,要求WM8782的MCLK和BCLK要求同步,而在电路上MCLK并没有连上,于是让硬件工程师把MCLK和BCLK连在一起,
再设置BCLK为1.04M,同时得到FS为8K,实际FS为8.1k,在LINE IN 上record。结果可以录制了。
还有一个问题,就是录制10S的,结果15S后 才结束,后来查到是系统时钟的问题,需要在bootloader里设置系统时钟。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -