近期在整6450开发板,在前期遇到一些问题。
1.在u-boot阶段串口波特率设置问题
波特率为115200时候,串口抛出乱码。后来用网上一款软件,有128000的选项设置,可以看到正常信息。但是常用串口软件minicom等常用串口没有128000的设置。所以必须要重新设置串口波特率。
根据文档,波特率设置如下:
DIV_VAL = UBRDIVn +(num of 1’s in UDIVSLOTn)/16
DIV_VAL = (PCLK/(bps x16)) -1
小数位存放在UDIVSLOTn里,下列是对应关系
Recommended Value for UDIVSLOTn
Num of 1’s UDIVSLOTn Num of 1’s UDIVSLOTn
0 0x0000(0000_0000_0000_0000b) 8 0x5555(0101_0101_0101_0101b)
1 0x0080(0000_0000_0000_1000b) 9 0xD555(1101_0101_0101_0101b)
2 0x0808(0000_1000_0000_1000b) 10 0xD5D5(1101_0101_1101_0101b)
3 0x0888(0000_1000_1000_1000b) 11 0xDDD5(1101_1101_1101_0101b)
4 0x2222(0010_0010_0010_0010b) 12 0xDDDD(1101_1101_1101_1101b)
5 0x4924(0100_1001_0010_0100b) 13 0xDFDD(1101_1111_1101_1101b)
6 0x4A52(0100_1010_0101_0010b) 14 0xDFDF(1101_1111_1101_1111b)
7 0x54AA(0101_0100_1010_1010b) 15 0xFFDF(1111_1111_1101_1111b)
之前没有设置正确,最关键问题是pclk值不对,之前一直认为是66MHz,后来抛出的是53.300MHz.
在uboot/board/samsung/smdk6450/lowlevel_init.S文件:
;ldr r1, =0x1A
ldr r1, =0x1c /*envi20120619 pclk=53.300MHz baud=115200*/
str r1, [r0, #UBRDIV_OFFSET]
;ldr r1, =0x0808
ldr r1, =0xd555/*envi20120619*/
str r1, [r0, #UDIVSLOT_OFFSET]
重新设置,串口信息正常。
2.fastboot不能使用问题
这个问题很纠结,找了2天,终于知道问题所在。之前认为是硬件连接的问题,跟HW确认后没有问题,才断了这个念头。串口输入fastboot,在终端敲lsusb,发现没有OTG USB的ID号。查看代码。
在u-boot阶段,fastboot.c如下:
ID定义如下:
#define VENDOR_ID 0x18D1
#define PRODUCT_ID 0x0002
有定义,却没有ID号。这很有可能与OTG USB有没有工作有关。先从OTG 配置入手,找电源,找时钟,参照文档,发现外部使用12M时钟,而配置成19.2M时钟源。修改后,fastboot可以连接上,可以正常刷写。
总结:这些与外部硬件器件的选取有关,当外部器件改变时,软件有可能要修改。