S3C2410X开发总结及心得
2019-07-13 16:35发布
生成海报
S3C2410X开发总结及心得
2002年12月,我来到现在的这家公司,当时来的时候还是一肚子的气,
现在是2003年8月,我打算离开这家公司,虽然有气,但是已经不是像当初来的时候那样了……
来到公司,就开始搞这个2410的项目,2410作为CPU,其他的部分由于商业的原因,
涉及到芯片的细节我就不在这里细细说了,
大致是一个DSP作为MPEG4的Encoder,还有一个FPGA和这个DSP共同工作,
产品的要求是一个嵌入式的硬盘录像系统,2410负责调动这个DPS、通过网络发送数据和存储视频。
当初老板买了一套这个DSP的开发板,花了他8500,准确的说是美金(我当时听了差点没有晕到)
板子很漂亮,StrongARM的,上面跑的Linux,
开发包很全,什么都有,DSP的Linux驱动程序,FPGA的firmware……
其实我心里一直以为嵌入式Linux这样的东西是不能当初商品来买的,因为谁也不敢保证说就没有这样那样的问题~
至于卖得满天飞的开发板……
S3C2410X是我向老板推荐的,理由就不说了,主要的原因就是资源丰富,性能够用,价格适中~支持多种OS~
不过要是能像Coldfire5272那样能内置以太网的话……嘿嘿
原理图地球人都知道哪里有下载的,我的想法就是按照这个来布线,至少原理上不会有错误。
大家注意好,现在我说的事情是过年以前的事情,
到过年的这段时间里,搭建好了交叉编译环境,按照官方的SMDK2410的原理图还有一些ARM Linux的资料看,
还有现成的驱动程序和firmware,我想等到系统跑起来的那天,差不多就可以出产品了,但是……
年过完了,老板找公司另外的一个牛人来画PCB,其实这个人我一直以来比较喜欢,做事情和我一样,很踏实的那种:)
SARS开始盛行,老板似乎也是看到了这是个发国难财的好机会,
然后就要搞什么红外体温检测,好家伙,光是红外探头就买了50000个!
中间公司的人事变动比较大,几个水平很高的搞上层的兄弟先后都另谋高就了~
前后也来了些搞单片机的兄弟,因为项目管理实在是混乱,先后也离开了~
现在他们还在搞红外的测温,总是有这样那样的问题出现,或者说上面有这样那样的意见,
改来改去,这两天趁着他们都出去了,才偷偷写下这份文档。
我在中间的这段时间,就是写了写开发文档和一些商业计划书。很是无聊。
中间我曾经主动帮他们这些搞单片机的人写了些C语言的代码,
我对自己的C语言很是放心,我15岁的时候就自学了这东西,到现在仍然很是自豪,
果然,他们都说我写的代码真是强,短小精悍,正是他们需要的……
原本以为板子很快都能交给我,谁知道,等板子给我的时候已经7月了:(
拿到板子的时候我一看,线倒是布得很宽,但是有些线走得太长了,像ram和flash这样的东西,但是我也没有太在意。
废话不说就开始干活,下载了vivi,当初我想把板子上flash都按照SMDK2410的留好,因为这种高频的电路和布线的关系很大,
谁也不知道会不会出什么怪问题。
这里要说的是现在从mizi下载的vivi在编译的时候会报错,这里有个小BUG,在一个加载vivi command的地方,
有个command的单词打错了,改过来就行了,看来mizi的人也会犯这种低级错误啊~
开始的时候调试板子上的一块nand flash(k9f2808),这个和SMDK2410上的不太一样(k9s2808,是那种SMC卡)。
调试的过程中发现怎么老是跳到SDRAM的地方就出错
vivi里对nand flash启动作了处理,因为本身S3C2410X支持nand flash作为bootrom,
S3C2410X在启动的时候,会把nand flash前面的一小部分装载到2410里面自己一个4k大小的buffer里面(Steppingstone)
在vivi里专门有一行on_the_ram,这个是在vivi复制自身到ram里之后,一跳进去就出错,
而且在前面有一段用来检测copy vivi到ram里是否正确的代码也老是过不去,
但是vivi里自己的ram检测是可以的,注意这个地方,vivi里检测ram只检测了1M的大小,
这个也和后来的最关键的地方埋藏了祸根……
可以用objdump把编译好的vivi-elf反汇编来看汇编代码~
(xxx-objdump -D vivi-elf > vivi.s)
在调试的过程中,和mizi(三星指定的S3C2410X的官方技术支持)的人也作了交流,
他们说怀疑我的硬件上有问题,我想不明白,两周之后我发现这个问题老是不对也没有办法,
就换到板子上另外的一个Strata flash的地方,为了和公司节省成本(考虑真周到),我们选用了和strata完全兼容的Qflash,
狂加了三天班,把flash烧写搞好了,2410官方的那个烧写是在windows上用的,不但要装驱动,而且是烧写32位的strata flash的,
而我们这个板子上只用了一片(16位的)
这三天,我每天加班到早上5点,第四天,我实在是盯不住了,回到住的地方大睡,醒来发现尿里都有血了!
唉,简直成了拼命三郎了~
vivi在这个板子上能动,但是在启动的地方有乱码,我想这个也许是BUG,改了改,一切看起来似乎都OK,
但是没有想到……
烧上编译好的zImage,事情就不对了,一加载zImage就跑飞了~
仔细检查检查,没有发现明显的错误,
后来发现了一个问题,这个是和编译器相关的,
相同版本的vivi,如果用vivi里原来的Makefile里所用的编译器和用arm-linux-GCC 2.95.3编译的东西在我的板子上完全是两个样子
用vivi指定的编译器,从minicom来看,启动的时候字符乱得一塌糊涂,
而且在Makefile里LINUXDIR也是要修改的,要用打了补丁的Linux,我的是在(/use/src/arm/linux/include),不然问题更多,
LIBS也要作修改,我修改到那个安装cross compiler lib的位置(具体请看附加的档案)
而且从官方网页下载的vivi和从CVS下载的代码在同样编译器编译的执行结果也有稍许差异
这个问题究竟是为什么,还需要进一步研究(可能和编译器的版本有关系)~
等我消除了一些大的问题后,原本以为没有问题了,结果在启动Linux的地方就出现了crc error的问题,
这个地方我开始怀疑我的烧写不对,但是通过串口下载vivi到内存里也是crc error
郁闷开始了……
我开始找这样那样的可能,最后全部排除后,我才开始怀疑我的板子硬件上布线有问题,
最后写了一段代码检测ram,错误居然是随机产生的~我哭,反复修改了寄存器的设置,问题依旧
找了我一个朋友,他那里有一快能用的2410的开发板子,测试软件没有问题,
和布线的同事仔细沟通了一下,再和别人能用的板子对比,发现问题有两点:
1.ram flash的线太走得太长
2.2410的文档里有个布线的要求很重要,sdram的所有信号线要近似等长,而且sclk要分两根,
布线的问题,2410的手册里说的很清楚,兄弟们如果也有在搞2410的话,请注意这些细节。
这种高频板和布线的关系很大,也是很关键的问题,2410本身布线是比较困难的,听朋友讲他们的2410改了三次版之多,
这两个问题是布线的同事没有注意到的,这也不能怪他,因为他从来也没有布过高频板,也没有布过多层板~
我想如果我的小孙兄弟来布线的话,估计就不会有这个问题了,可惜他现在怎么样我也不知道,祝他好运~
至此,关键问题找到了,但是不是那么容易解决的,因为要重新布线:(
不过我的老板对我的态度似乎不像我刚来公司的时候啊,唉,tnnd
现在的公司大多没有项目管理的概念,出了问题好像永远都是搞技术的人的错,
如果这里的兄弟哪天开公司,希望大家能作大,不然总是这样下去的话,恐怕中国的IT水平……
心得也大概就这么多了,在开发过程中还要感谢我从前在华恒的兄弟对我的关心,特别是hn,
当然还要感谢tpu大哥的热心帮助,还有我的诸多好兄弟,你们对我的帮助让我在这个世态炎凉的世界里还稍许感到有点温暖~
最后说一点,估计这个版里的兄弟也都是搞技术的多吧,希望这里的好兄弟都能事业有成
下面我附加了我最后两个版本的vivi和flash烧写工具,欢迎大家测试和交流
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮