OMPL138及U-Boot的启动过程分析(二)
2015-11-27 13:46
267 查看
每个AIS命令由一个Opcode、一个或多个参数和一组数组组成。Opcode和参数是以一个字的长度(4个字节),不足4个字节的话用0去填充。
下面对我现在使用的AIS文件进行,解读,其中对部分硬件的初始化把握的不好,原因是不太熟悉,但是能分析出是做了什么工作,AIS文件本身做的不多,初始化了一部分之后,其余都交给了U-Boot处理了,后面会将U-Boot部分的。
AIS文件:
以上就是一个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部分。
下面对我现在使用的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部分。
相关文章推荐
- 木马藏身于系统进程中
- android应用性能测试之CPU和内存占用
- JVM详解链接地址
- 【Protobuf】
- mybatis 使用动态SQL
- Android toolbar添加SearchView混淆打包成功后访问出错
- js原型的理解之一切皆对象
- CSS定位
- [Android]打开eclipse报错:发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素。
- hadoop常见错误整理
- centos配置jdk
- 微信自定义推送模版消息
- JAVA多线程实现的三种方式
- 市航天纪念钞 出门就升值
- 1041. Be Unique (20)
- ARM架构下linux设备树加载的方法
- ViewAnimator及其子类
- 1035. Password (20)
- R语言实现KNN 算法
- 对前台传过来的json对象或数组进行转化