主题 : tiny210 (s5pv210) + WM8960 芯片驱动调试成功 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 69850
精华: 1
发帖: 24
金钱: 170 两
威望: 34 点
贡献值: 1 点
综合积分: 68 分
注册时间: 2012-05-12
最后登录: 2012-11-30
楼主  发表于: 2012-05-19 18:13

 tiny210 (s5pv210) + WM8960 芯片驱动调试成功

from  wiki:   https://github.com/limingth/LASO/wiki

2012.5.17
=========
1. 开始调试  audio(IIC/IIS/WM8960) 驱动,争取实现 wav 播放  


2012.5.18
=========
1. 查了 N 多资料,终于解决了 audio wm8960 播放出声音的问题,用 wav 文件测试,基本能听出音乐来,但还需要优化。  
下面是网上找到的一些比较好的资料:  
http://xboot.org/forum.php?mod=viewthread&tid=3074&page=1&authorid=490  
http://xboot.org/thread-3074-1-1.html
http://code.google.com/p/maxwit/
http://read.pudn.com/downloads138/sourcecode/embed/594016/44b0/123.c__.htm
http://www.sectop.com/post/86.html
http://www.sectop.com/post/94.html
http://www.52rd.com/Blog/Detail_RD.Blog_hecrics_4314.html
http://www.diybl.com/course/6_system/linux/Linuxjs/20100116/191743.html
http://blog.chinaunix.net/uid-22950545-id-2600582.html
http://www.docin.com/p-259094649.html
http://wenku.baidu.com/view/755f4c69561252d380eb6ebf.html (检测耳机插拔)

2. 最后解决问题的关键还是在于 IIS 寄存器的配置,之前用的参数是 linux 启动之后的值。详见  
https://github.com/limingth/LASO/wiki/8-How-to-init-IIS-and-IIC-to-make-wm8960-chip-play-wav-file  
后来经过测试,发现 linux 启动的 IIS 配置,clock 实际上是不对的,需要运行一个音视频程序之后的值,才是对的。  
据高人指点,说这样的设计,是为了在平时不播放音频的时候,降低 clock 可以省电。

2012.5.19
=========
1. 昨晚跑通的程序,白天起来再运行就挂了。 但如果用 linux 下的程序再跑一遍,然后 reset 板子,再运行就又能成功。  推测大概是因为 wm8960 芯片被 linux 初始化过之后,能够正常工作了。 reset 板子并没有 reset wm8960,因此程序才能成功。  于是继续研究 wm8960 芯片的内部寄存器的设置,同时参考了 高人提供给我的 wm8976 芯片的初始化配置值,进行类比替换。   通过上面的调试方法,把对播放有用的寄存器再自己重新设置一遍,终于最后能够自己初始化 wm8960 芯片并播放声音了。  

2. 结论:wm89xx 之类的芯片,本身 reset 之后,寄存器的默认值是不能工作的。  
        初始化内部寄存器,需用通过 IIC 总线,实现一个 IIC_write(chip_addr, reg_addr, reg_data) 函数。  
        内部寄存器中,必须要设置的寄存器包括 reset, power, clock, mute, audio interface, volume, mixer control 这些。  

3. 测试:WindowsXP.wav 下载到 0x22000000,用 IIS 的 polling 方式,发送音频数据,音乐播放成功!

4. 代码已上传至 https://github.com/limingth/ARM-Codes/blob/master/tiny210-linux-codes/app4-audio-demo/
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
1楼  发表于: 2012-05-19 19:01
貌似调的很辛苦啊,多谢你的分享
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 新手上路
UID: 69850
精华: 1
发帖: 24
金钱: 170 两
威望: 34 点
贡献值: 1 点
综合积分: 68 分
注册时间: 2012-05-12
最后登录: 2012-11-30
2楼  发表于: 2012-05-19 21:53
主要是没有三星原厂的参考代码,也没有linux下的驱动源码,所以只能靠 linux 启动后偷看了一下寄存器的配置。

以前 mini6410 光盘好像还提供 三星原厂资料,tiny210 的光盘里似乎没有这个资料了。

不过,发现这个方法还是很实用的,LCD 之前也是这样做出来的。

下一步计划调试 触摸屏驱动,SD/MMC 控制器,USB 控制器,争取实现读取 SD 卡 和 u盘的 FAT 文件系统。

有进展我会在 https://github.com/limingth/LASO/wiki  上随时发布的。
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2012-05-20 08:33
虽然过程辛苦,但它比最终的结果也更有价值,非常感谢你的分享
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 88420
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
贡献值: 0 点
综合积分: 16 分
注册时间: 2013-03-09
最后登录: 2013-05-16
4楼  发表于: 2013-03-09 20:29
mark
级别: 新手上路
UID: 91131
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2013-05-03
最后登录: 2013-05-08
5楼  发表于: 2013-05-07 13:23
非常感谢 !
级别: 新手上路
UID: 98423
精华: 0
发帖: 27
金钱: 140 两
威望: 28 点
贡献值: 0 点
综合积分: 54 分
注册时间: 2013-11-26
最后登录: 2017-09-13
6楼  发表于: 2014-02-12 13:00
友善之臂不是提供了内核的驱动代码了吗,F:\A\Linux\linux-2.6.35.7-20121027\linux-2.6.35.7\sound\soc\codecs\wm8960.c。
难道这个源代码不行吗,要是上层调用的话改怎么调用呀????
级别: 新手上路
UID: 88407
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
贡献值: 0 点
综合积分: 16 分
注册时间: 2013-03-09
最后登录: 2014-04-22
7楼  发表于: 2014-04-02 10:30
有录音的代码么?
经e事,长e智
级别: 新手上路
UID: 85732
精华: 0
发帖: 26
金钱: 130 两
威望: 26 点
贡献值: 0 点
综合积分: 52 分
注册时间: 2013-01-08
最后登录: 2014-06-06
8楼  发表于: 2014-06-05 17:23
为什么我通过超级终端传送audio.bin文件给ARM板时总是连接超时,无法传送文件呢?