1.板子回来后第一块板子,烧写uboot到sd卡然后启动,串口输出No Boot Image,尝试各种方法找不到问题的所在。无奈之下换一块板子调试,同样烧写uboot到sd卡启动结果串口输出了uboot版本等信息。
此时做了一个实验,用两个sd卡一个1G一个4G。
1)用dd if=/dev/zero of=/dev/sdf bs=8192把两个卡都清空,启动时串口输出
No Boot Image
Uart negotiation error
inser on OTG...
2)在上一步的基础上写如bl1,启动时串口输出
No Boot Image
OK
由于此现象和第一块板子的现象相同,故猜测第一块板子bl1跑完了。
3)在2)的基础上再写入uboot.bin,启动时串口输出ubot的版本等信息
由此进一步猜测第一块板子bl1运行了,但是bl2没运行,原因未知。
2.uboot中start.S一般不会有问题,如果此处不能运行一般会是硬件电路出了问题。
3.多几块板子做交叉验证,交叉验证对软硬件调试都是一个很好的方法。
4.为什么系统运行跑到Calibrating delay loop...后过好久才能继续运行或者直接死在这里?
由于在system timer没有动或好一会儿才动,所以没产生时钟中断或过好一会儿system timer才动。
而对于s5pv210芯片system timer是与xrtcxti有关的,所以归根结底是由于rtc的晶震没震或者是过好一会儿才震动,导致system timer没动或过好一会儿才动。
所以导致jiffies数值一直没有变化或过一会儿才有变化,所以calibrate_delay函数里的死循环出不来或过一会儿才能出来,导致上面的现象。
在calibrate_delay函数(init/calibrate.c)中有一下代码:
146 while ((loops_per_jiffy <<= 1) != 0) {
147 /* wait for "start of" clock tick */
148 ticks = jiffies;
149 while (ticks == jiffies)
150 /* nothing */;
151 /* Go .. */
152 ticks = jiffies;
153 __delay(loops_per_jiffy);
154 ticks = jiffies - ticks;
155 if (ticks)
156 break;
157 }
如果jiffies不便的化149和150行的循环一直成立,知道jiffies有变化即system timer产生时钟中断。
5.硬件调试心得,板子刚打出来是首先确认供给cpu的晶震和电压工作正常,对每个有问题的外设首先要确定其clock正常,然后在查其他的pin脚。
6.system timer和rtc是不同的概念。system timer要产生时钟中断的。rtc是记录年月日的
7.sd不识别的问题
产生此问题的原因是三星s5pv210的bsp默认是把内部flash挂在为sdcard,但是内部flash并没有分出作为sdcard的分区,所以挂在不到sd卡。
解决办法是修改/system/etc/vold.fstabgu外部的tf卡作为sdcard
参考:http://www.linuxidc.com/Linux/2011-11/47136.htm
8.检测sd卡驱动是否ok的方法:
如果把sd卡插入设备,在 /dev/block/ 目录下面也会多出几个设备节点,证明sd卡的驱动已经成功加载。 我自己测试的目录下面会形成 mmcblk0 和 mmcblk0p1 节点,注意:这两个节点的意思,mmcblk0代表第一个SD卡设备,mmcblk0p1代表第一个SD卡设备的第一个分区。真正挂载到系统中的是mmcblk0p1而不是mmcblk0,这一点很重要。
9.inand和sd卡不识别的问题。
10.使用rda5876蓝牙芯片的过程中,发现第二批板子可以正常工作,第一次打出的板子蓝牙芯片无法正常工作,现象是有时能搜到其他设备,有时搜索不到,即使搜到的设备连接传输数据时,有时也会失败。问题是出在使用的晶振不同,导致蓝牙芯片有频偏,频偏正好处在临界点,故出现上述现象。换一个晶振或校准一下频偏就ok了。