关于Stellaris 引导装载程序的疑问。



你好!

看TI的CORTEX-M4的规格书,里面提到IC内部在0X01000000的地方,有一部分“Stellaris 引导装载程序”。

这部分程序做以下事情:

1. 清零 BA 位以使 ROM 映射在 0x01xx.xxxx,同时 Flash 存储器映射在 0x0
2. 读取 BOOTCFG 寄存器。如果 EN 位被清零,那么将指定的 GPIO 管脚状态与规定的极性相比
较。如果管脚状态与规定的极性匹配,那么 ROM 会映射到地址 0x0000.0000,继续执行 ROM
引导装载程序。
3. 如果管脚状态与指定的极性不符,那么地址 0x0000.0004 的数据就会被读取,如果该数据是
0xFFFF.FFFF,那么 ROM 被映射到地址 0x0000.0000,继续执行 ROM 引导装载程序。
4. 如果地址 0x0000.0004 中的数据不是 0xFFFF.FFFF,堆栈指针 (SP) 装载 Flash 存储器地址
0x0000.0000 的数据,程序计数器 (PC) 装载地址 0x0000.0004 的数据。随后用户应用程序开
始执行。

对于这一程序,规格书说如果FLASH内的数据都为1,可以通过UART等接口升级软件:

1.   是不是当我的FLASH内没有数据的时候(都为1),我可以利用LM,通过CAN,UART等接口对IC烧写软件?

2.   规格书里面提到:通过使用启动配置寄存器 (BOOTCFG) 中配置好的端口 A-H 的 GPIO 信号,用户可以选择让内核直接执行 ROM 的引导装载程序或 Flash 存储器上的应用程序,但是如果配置位直接执行FLASH上的应用程序,那么一些初始化是不是要应用程序来做?(上面红色的部分)

第一次做ARM的东西,比较生疏,还请老手不吝赐教,这里先谢了。

  • 1. BOOTCFG寄存器没有使能GPIO口检测,BOOT程序会检测FALSH的数据(更确切的说是你复位向量),如果为0XFFFFFFFF,芯片进入BOOT状态,你可以通过UART,CAN,USB等接口对芯片编程。

    2. 启动配置寄存器出厂时设计为0XFFFF,即默认是忽略GPIO的信号(具体内容参见BOOTCFG寄存器的EN位)。用户如果想通过设置GPIO口来UPDATE程序,需要更改BOOTCFG的寄存器的值。也就是你说的这些初始化操作要用用程序来做。