F28335BootROM笔记

OTP:one time programmable
DSP的寄存器详细信息包含在每个模块的独立PDF里面
IQ 数学表:
1,sin cos表。2,标准反转表。3,标准平方根表。 4,标准反正切表。5,舍入饱和表。6,指数最大最小表。7,指数系数表。
1.3 CPU向量表:0x3F FFC0 - 0x3F FFFF
2.1 bootloader功能操作
在上电后,bootloader用于将一个外部source代码加载到内部memory。这允许代码存在于一个缓慢的外部记忆体,并且被转移到高速的内存来执行。
如果bootloader被调用,然后由外设加载的输入流确定这个入口地址。相反,如果直接引导至FLASH、OTP、XINTF或SARAM,该入口地址是预先定义的每个存储块。
bootloader的sourcecode入口地址定义:
Flash入口地址:0x33 FFF6。
OTP入口地址: 0x38 0400。
RAM入口地址: 0x00 0000。
XINTF入口地址:0x10 0000。
2.2 bootloader设备配置:
在reset,任意28x系列CPU设备都是在27x object兼容模式。它是在继续执行前由应用程序将器件置于适当的操作模式。
在28x器件上,从内部引导ROM启动时,该设备室由引导ROM软件配置为28x的操作模式。
2.3 PLL乘数和除数选择
PLL乘数(PLLCR), 除数(PLLSTS[DIVSEL])。
当XINTF并行loader:PLLCR和PLLSTS[DIVSEL]由输入流指定。
当其他启动模式时:PLLCR不更改,PLLSTS[DIVSEL] 被设置为2 for SYSCLKOUT = CLKIN/2,这样增加了loader的速度。
2.4 看门狗模块
当直接执行:FLash、OTP memory、M0 single-access RAM(SARAM),或扩展接口XINTF时,看门狗不会被触发。
在其他启动模式,看门狗在启动之前被disable,在执行最后的目标地址之前再enable和clear。
解释:由代码可以看出,如果是其他启动模式,那么获取入口地址的操作就会进入另一个函数文件,时间很长,所以需要disable看门狗。
2,5 ITRAP(illegal trap)中断
如果一个非法的操作码被获取,那么28x将触发一个ITRAP中断。在启动过程中,ITRAP使用的中断向量是bootROM的CPU向量表中。ITRAP中断向量指向bootROM内的中断服务程序ITRAPIsr()。该中断服务程序尝试使能看门狗,然后一直循环下去直到处理器reset。在用户的应用程序初始化和enable PIE块之前,该中断服务程序将用于任何ITRAP。一旦PIE使能,那么位于PIE向量表中的ITRAP向量将被使用。
2.6 内部上拉电阻
每个GPIO引脚都有内部上拉电阻,可以通过软件使用和禁用。决定启动模式的那几个pin(GPIO87、86、85、84)的设置默认在reset后被上拉。在嘈杂条件下,仍然建议通过外部配置模式选择引脚。
外部bootloader都会enable 用于控制和数据传输的引脚的上拉电阻。当bootloader存在时,它将失能这些引脚。例如,SCI-A的bootloader enable SCITXA和SCIRXA的上拉电阻。在bootloader退出后,禁用上拉

电阻就是你的责任(如果有需要)。
2.7 PIE配置:
启动模式不会使能PIE,此时它时默认状态-disabled。
2.8 Reserved memory
在启动加载过程中,M0的内存块的地址范围0x0002-0x004E预留给堆栈和EBSS代码段。如果代码被加载到这片区域,那是没有错误检查来防止它破坏boot ROM堆栈。地址0x0000-0x0001是启动到M0的进入点。在使用SARAM启动模式是,这个进入点将使用一个分支指令加载来启动main应用程序。
2.9 bootloader模式
启动模式选择:
GPIO87 GPIO86 GPIO85 GPIO84 (这四个pin都有内部上拉电阻)
F - Jump to Flash
E - SCI-A启动
D - SPI-A启动
C - I2C-A启动
B - eCAN-A启动
A - McBSP-A启动
9 - Jump to XINTF x16
8 - Jump to XINTF x32
7 - Jump to OTP
6 - 并行GPIO I/O启动
5 - 并行XINTF启动
4 - Jump to SARAM
3 - Branch to 检查启动模式 - debug目的
2 - Branch to Flash,跳过ADC校正 - debug目的
1 - Branch to SARAM,跳过ADC校正
0 - Branch to SCI,跳过ADC校正

2.12 InitBoot 汇编子程序
复位后调用的第一个程序是InitBoot汇编程序。此程序初始化设备来操作C28x模式。InitBoot同样执行一个虚读代码安全模块(CSM)password位置。如果CSM密码被擦除(全是0xFFFF)那么这会解锁CSM。否则CSM仍保持锁定,这个password位置的虚读无任何效果。如果您有一个新的设备想要被加载,这会有用的。
在虚读CSM密码位置后,InitBoot程序调用“SelectBootMode”函数。这个函数决定启动模式。一旦启动完成,SelectBootMode函数传回入口地址(EntryAddr)给InitBoot函数。入口地址是bootloader退出后代码开始执行的地方。InitBoot然后调用ExitBoot子程序,然后将CPU寄存器恢复到reset状态,并退出到EntryAddr。
2.13 SelectBootMode函数
对于要选择的启动模式,GPIO87-84必须被拉高或拉低,直到选择执行完。注意:这几个pin的状态在reset时没有锁存;在SelectBootMode函数中被采样几个周期。在reset时,内部上拉电阻是enabled。我们仍然建议通过外部配置启动模式来避免任何噪声对这些pin的影响。
该函数还检查PLLSTS寄存器里面的时钟丢失探测bit(MCLKSTS),以确定PLL是否工作在limp模式。如果PLL工作在limp模式,启动模式选择函数依赖于启动模式选择来采用适当的行动:
boot to Flash、OTP、SARAM、I2C-A、SPI-A、XINTF和并口I/O:
这些模式行为正常。如果MCLKSTS位被置位,用户软件必须检查丢失时钟状态并采取适当行动。
SCI-A启动:
SCI启动将会被调用。但是,根据请求的波特率,该设备可能无法自动波特锁定。这种情况下bootROM软件将在自动波特锁定函数里无限循环下去。SCI-A启动完成后,用户应该检查丢失时钟状态并采取适当行动
eCAN-A启动:
eCAN bootloader将不会被调用。在b

oot ROM内无限循环。
McBSP启动:
McBSP loader将不会被调用。在boot ROM内无限循环。
2.14 ADC_cal汇编子程序
该子程序由厂商写入到TI保留的OTP内存里面。Boot ROM自动调用ADC_cal()子程序来初始化ADCREFSEL和ADCOFFTRIM寄存器,注册特定的校准数据。正常操作时,此程序自动执行,无需用户操作。
如果在开发过程中,bootROOM由CCS绕过,那么ADCREFSEL和ADCOFFTRIM必须由应用程序初始化。
2.15 CopyData函数
每个bootloader都使用同一个函数从Port拷贝数据到DSP SARAM。这个函数就是CopyData()。这个函数使用一个指向GetWordData函数的指针来正确读取端口数据。GetWordData()函数由每个loader初始化。例如,当SPI loader被诱发,GetWordData()函数指针被初始化为指向SPI_GetWordData函数。因此,当CopyData()被调用,正确的端口被访问。
2.17 SCI启动功能
SCI启动模式异步传输代码从SCI-A到内部memory。这个模式只支持8位数据流输入。
28x设备与外部主机设备通信通过SCI-A外设。SCI端口的自动波特率功能是用来锁定波特率。由于这个原因,SCI loader是非常灵活的,你可以使用不同的波特率与设备进行通信。
每次数据传输后,DSP将回显收到的主机的8位字符。在这种方式下,主机能够执行检查28x接受到的每个字符。
在较高波特率下,输入数据的压摆率可以通过收发器的性能来实现。而正常的串行通信可以很好的工作,这种压摆率可能限制可靠的自动波特率探测在更高的传输速率下(通常超过100K波特率),并导致自动波特率锁定失败。为避免这种情况,建议如下:
1,使用一个较低的波特率实现host和28x的SCI交互。
2,在这个较低的波特率加载28x的应用程序或自定义的加载程序。
3,然后,主机可能与28x加载的应用程序握手来设置SCI波特率寄存器为所需的高波特率。

3.1 C2000 hex工具 : hex2000
这个16进制工具支持创建SCI、SPI、I2C、eCAN、parallel I/O loader的启动表。也就是说,hex工具添加了文件所需的信息,例如key值,保留位、入口点、地址、块开始地址、块长度和终止值。启动表的内容略不同于启动模式和运行hex转换工具的选项。实际所需的文件格式会与一个特定的应用程序有所不同,并且一些额外的转换可能是必须的。
建立启动表的步骤如下:
1,汇编或编译代码
这会创建一个由链接器用来创建一个输出文件的目标文件。
2,链接文件。链接器将所有的目标文件合并为单个输出文件。
指定的链接器命令文件被链接器用来分配代码段到不同的内存块。启动表的每个数据块对应于一个COFF文件的初始化部分。未初始化的部分不能由hex转换工具转换。下列选项可能有用:
-m 产生map文件

。显示被创建的所有部分,包括他们的内存位置和长度。可以通过检查这个文件来确定初始化部分是不是期望的那样。
-w 告诉你链接器是否已经分配了一段到内存区域。
3,运行hex转换工具
为需要的启动模式选择适当的选项,运行hex转换工具转换COFF文件到一个启动表。该COFF文件由链接器产生。





































相关文档
最新文档