如果有人让你开发TAS2557的I2C驱动,请把本文转给他

Posted NiceBT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果有人让你开发TAS2557的I2C驱动,请把本文转给他相关的知识,希望对你有一定的参考价值。

1. 开始吐槽

本文内容纯属YY,请各位不要对号入座。如有雷同纯属巧合。

2. 多数战友死于我方炮火

常说子弹不长眼,一旦交火,枪炮满天飞,难免误伤友军。怕就怕有些人,身上扛着人间大炮,前方隐约见到有敌情,立马一颗穿透导弹过来。结果敌人没炸到,友军主力伤亡大片。往往这种人还振振有词,说自己时刻保持着最高斗志,自己如何如何要保家卫国。拜托,开炮之前,你的侦察兵在哪?你的瞭望手在哪?遇到部队里有这种炮兵队长,切记不要站得比他靠前,否则只会把你的人头记在我方伤亡人数中。

3. 冲锋队也要朝九晚五

冲锋队的日子是要死要活的。出发前,往往是告别亲人,嘱托后事,修整军备,大家举起大碗一干而尽再齐声把碗砸碎,以表决心。不料此时突有一战士放下武器就往营房走去。身边战士不解问道,大敌当前,你这是要做逃兵吗?他一脸鄙夷说道,你要死你去死,我进来的时候说好年终四薪,朝九晚五的,我家还有孩子要照顾,要拼命你们去拼,我下班了!说完掏出手机,坚持最后五分钟。此人还兼任上述炮兵队长的侦察排长。

4. 熄灯前准时召唤你的夜哨战士

一个人的夜是多么空虚寂寞冷,没值过夜哨的人不会懂。于是新入伍的战士被派去体会,加深对军营生活的认识。此人生活经历丰富,近来不知为何更是感慨颇多。你多就你多,熄灯前你拉别的战士陪你做什么?谁不要睡觉呢?吹嘘着村里大姑娘给你送烙饼,打听着连队里有没有高干子弟,诉说着值夜时望着满天星辰,而他孤独一人心中苦闷云云。幸而最近领导发现队内多名战士白天瞌睡,且渐渐疏远此人,故将此人调离,实乃万幸。

5. 精明的老掌柜和憨厚的伙计

最近炮兵连长要进一批军火,侦察排长提出TAS2559十分适合。TAS2559的THD+N<0.003%,意味着炮兵连长打出去的炮弹会十分精准得落在敌人头上。

外籍军事专家还指出TAS2559的SmartPA功能可以大幅提升炮管的耐受力,使得炮管可以发射更大的炮弹,增大炮弹的杀伤力。TAS2559的弹道经过非常强大的DSP的修正,可轻易绕过障碍击中目标。侦查排长又说他和经销TAS2559的伙计A十分熟络,随叫随到。于是伙计B带着TAS2557来演示其惊人的THD+N的性能。对,你没看错,是TAS2557。为什么不是TAS2559?!因为TAS2559需要和TAS2560配合使用,TAS2559负责打左边敌人,TAS2560负责打右边。而我们只需要打一边,所以用TAS2557是最合算的。那为什么伙计A没来,伙计B说其实伙计A是个彩笔,他只会做红衣大炮的售后服务。而且憨厚的伙计A说,他们的大金主是米家军,他有空的时候都要待在那边伺候大金主,以后估计不会再来了。我心里当时一千匹CNM奔腾啊,就这个样子还打什么仗?都快上前线了,武器还没选好!这是打仗吗?

6. 言归正传

如果看了上文,你还要坚持开发TAS2557的I2C驱动,有几个衷心的忠告,希望能帮到你:

  • 如果你是在android平台上开发,恭喜你,你有TI提供的源码可以参考,你是幸福的。运气好还能享受他们的调音服务。
  • 如果你是在linux平台上开发,嗯,你可以参考android平台的代码做一些简单修改。算是个小坑吧。
  • 如果你是在通用MCU平台上开发,呵呵,android驱动需要改动的地方可不少,但只要你的RAM空间足够,花一些功夫是可以办到的。
  • 如果你是在CSR8675平台上开发,听听幸存者给你的忠告,你这是自寻死路!如果你一心求死,那就请参照android驱动重写驱动代码,以适配你的平台,并且考虑RAM不够用的情况。很不幸,你选了最难的道路,但也是最有挑战和成就的。
  • TAS2557的驱动程序分三个部分:解析bin文件并加载程序到内存,将程序加载到TAS2557内部的DSP,配置TAS2557的寄存器组。

如果你选择了在CSR8675平台上开发,有几个难点需要突破。首先CSR8675的const段只有24KB,而1个TAS2557的bin文件就有将近20KB,如果你将bin文件放在const段,相信我,你的程序是不能编译通过的。

唯一的办法是存放在外置Flash里面。这里你需要掌握CSR8675的文件管理系统、stream流读写等基本没有参考资料的功能,而且由于CSR8675的ADK开放出来的少得可怜的RAM,你会享受到在无法malloc内存的情况下的极限编程的快感。好消息是通过stream流读写外部Flash文件的方法,可以给用户程序开放出来大约3KB的内存空间,这正好解决了无法malloc内存导致的编程难题。

TAS2557的bin文件是通过官方提供的PPC3工具生成的。此工具生成的bin文件需要专门的阅读工具才能看懂,不要翻数据手册啦,里面根本没有。而且生成的bin文件只适配android平台,如果你硬要用在MCU平台上,不要怪我没提醒你,一定要注意I2C的burst写操作时的寄存器地址。这个bug困了我一个星期,不过我要感谢这个bug让我对I2C burst有了更深的掌握。

TAS2557坑完软件又要坑声学了。TAS2557的DSP有有ROM和RAM两种模式。ROM模式只能出声,不能调音。RAM模式可以在线调音,这里的在线指的是用USB线将TAS2557开发板和PC相连。对,你没看错,TAS2557不支持I2C调试。那怎么支持芯片在系统调试?告诉你,这个我们也做到了,方法是黑掉TAS2557的PPC3工具的配置文件,使得PPC3以为它是和开发板连接,实际上他是和我们的整机上的芯片连接。这个功能连FAE都没做出来,想想这个坑有多大多深,听我一句,不要往里冲,不是每个人都能爬出来的。

好了,最后一个坑,也是最恶心的坑。就是硬件非要搞什么3线I2S,美名曰减小电路板的电磁干扰,EMI更容易过!硬件少一根线,软件和声学差点被坑死。TAS2557的开发板根本不支持3线I2S,查了官网的很多手册,才通过修改开发板电路的方式实现。这是有多大仇啊,非要往里面投入这么多人力物力,省下时间多写写专利,写写博客,多好!纯粹的没事折腾自己玩,大有自废武功的嫌疑。

7. 收尾

难得吐槽得这么爽,看到这的你能否感受到我的良苦用心。

最后送上小诗一首:
研发过程处处是坑,跳出来的都是大神。
今天焊板明天调试,忙来忙去劳心劳神。
不求有功但求无过,少为自己多为他人。
学好技术练好本领,好为领导挡枪填坑。

以上是关于如果有人让你开发TAS2557的I2C驱动,请把本文转给他的主要内容,如果未能解决你的问题,请参考以下文章

Linux驱动开发I2C

Linux驱动开发I2C

i.MX6ULL驱动开发 | 11 - Linux I2C 驱动框架

i.MX6ULL驱动开发 | 11 - Linux I2C 驱动框架

linux驱动:i2c设备总线驱动

Linux驱动开发19-I2C子系统之客户驱动分析与移植