您的位置:首页 > 其它

OMPL138及U-Boot的启动过程分析(二)

2015-11-27 13:46 267 查看
每个AIS命令由一个Opcode、一个或多个参数和一组数组组成。Opcode和参数是以一个字的长度(4个字节),不足4个字节的话用0去填充。

下面对我现在使用的AIS文件进行,解读,其中对部分硬件的初始化把握的不好,原因是不太熟悉,但是能分析出是做了什么工作,AIS文件本身做的不多,初始化了一部分之后,其余都交给了U-Boot处理了,后面会将U-Boot部分的。

AIS文件:
21 00 00 00 54 49 50 41 0D 59 53 58 00 00 02 00
01 00 1E 00 05 01 00 00 0D 59 53 58 03 00 08 00
18 00 01 18 00 00 00 00 C4 00 00 00 21 C6 03 0A
48 2A D9 10 00 77 0E 3A 59 04 00 C0 00 00 00 00
07 59 53 58 04 04 05 00 04 C0 E2 01 03 00 00 00
00 00 00 00 0D 59 53 58 05 00 05 00 FD FF FF 3F
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
01 59 53 58 00 00 08 C1 38 A5 03 00
......
......
06 59 53 58 00 00 08 C1


以上就是一个AIS文件中的AIS部分,中间省略号表示的是U-BOOT部分。

前面说过,AIS文件采用的是32位(4字节)的小端格式,所以解读文件还得转换成我们常用的方式:

00 00 00 21 : 这个字数据就是Flash的第一个字,就是第一段的bootloader配置EMIFA为8-bit访问的方式所访问的那个字,这个字就是Configuration Word,由这个字来判定是使用何种方式去做之后的引导,根据前面字段的分析,使用的是 AIS NOR boot, 16-bit的访问方式。

41 50 59 54 : Magic Word,这个字段没什么意义,貌似就是表示这个文件是AIS文件的意思。

58 53 59 0D : 这里就是AIS命令了,这个字段表示执行命令,这个命令执行的是函数的命令。

00 02 00 00 : 函数后的这个字段表示,函数的序号和参数的个数,前面2个字节表示参数个数,后面标识函数号,具体的函数功能参考官方文档:Using the TMS320C6748/C6746/C6742 Bootloader,中的Appendix D.在这里这个函数的功能是设置PLL0。

00 1E 00 01 : 上面的字段说明了参数个数有2个,之后就会跟着两个参数,这个字段表示第一个参数,第一个参数设置的是CLKMODE,时钟源的设置,为外部晶振提供,PLL0的倍频系数为31,分频系数为2,外部时钟源设置的为19.2MHz,所以我们的CPU工作频率为297.6MHz

00 00 01 05 : 第二个参数是由CPU对外围设备分频系数设置

58 53 59 0D: 第二个函数执行命令

00 08 00 03 : 函数号为3,参数有8个(好多~),这个部分设置的是mDDR

18 01 00 18 :mDDR依赖于PLL1,所以在配置mDDR之前需要对PLL1进行配置,PLL1的配置需要两个字段,这里的PLL1倍频系数为25,分频系数为2,PLL1的PLLDIV1的输出提供给mDDR,所以mDDR的工作频率为240MHz。

00 00 00 00 :继续配置PLL1

00 00 00 C4 : 第三个参数设置DRPYC1R,关闭Power down enable for DDR inputbuffer. DRPYC1R = 0x000000C4

0A 03 C6 21 :SDCR = 0x0A03C621 (不明白后面的参数什么意思啊)

10 D9 2A 48 :内存时序1 SDTIMR1 = 0x10D92A48 (为什么要配两个时序?)

3A 0E 77 00 : 内存时序2 SDTIMR2 = 0x3A0E7700

C0 00 04 59 : SDRCR = 0xC0000459

00 00 00 00 : SDCR2 = 0x00000000

58 53 59 07 : 又是AIS命令了,不过是另外一种,这个命令叫做Boot Table Command,这个命令的作用还不理解,貌似是执行表

00 05 04 04 : Type Word for Boot Table Opcode,这个是个类型字,关注的数据有三个 STOP = 5,START = 4, LENGTH = 4.

01 E2 C0 04 : Address = 0x01E2C004

00 00 00 03 : Data = 0x00000003

00 00 00 00 : Sleep = 0

58 53 59 0D : 函数执行了,这个是最好理解的。。。

00 05 00 05 : 函数号 = 5,参数个数也是5个,这里进行的初始化是EMIFA(也不是很懂这个外设)

3F FF FF FD : CE2CFG = 0x3FFFFFFD

00 00 00 00 : CE3CFG  = 0x00000000

00 00 00 00  : CE4CFG = 0x00000000

00 00 00 00 : CE5CFG = 0x00000000

00 00 00 00 : NANDFCR = 0x00000000

58 53 59 01 : 这段用来载入U-Boot的了,叫做Section Load Command

C1 08 00 00 : 载入地址 Loadaddr = 0xC1080000

00 03 A5 38 :载入大小 Size = 0x0003A538

...开始U-boot了

...

59 53 59 06 : Jump & Close Command.

AIS文件尾部,跳出指令
C1 08 00 00 : 跳出地址 Addr = 0xC1080000

解读整个AIS文件还是很麻烦的,虽然内容不多,但是对外不了解,也是麻烦啊 。

继续上U-Boot部分。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: