芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

飞芯科技-芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

Boot Loader应用说明—HelloM3PCB抄板

PCB抄板 Boot Loader 是在用户应用程序开始运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备和软件环境,从而将系统的软硬件环境带到一个合适的工作状态,以便执行某些特定的功能。一般来说就是用来升级程序,引导程序或操作系统等。
    LM3S 系列的芯片有些具有固化在内部ROM 的Boot Loader,有些则没有。根据芯片相应的数据手册可以很容易的确定这个问题。通过固化在ROM 中的Boot Loader,可以通过串口(UART0)、SSI(SSI0)、I2C(I2C0)、以太网将程序下载FLASH 中,而不需要使用JTAG 调试引脚。下面我们分类讨论关于Boot Loader 的几个问题。

1、PCB抄板如何使用内部的Boot Loader。

  对于有内部Boot Loader 的芯片来说,可能会遇到如下的问题:
  1、使用内部的Boot Loader 有几种接口可供升级。
  2、如何使用内部的Boot loader。
    先回答第一个问题,关于这个问题前面提到了一句,内部Boot Loader 支持串口(UART0)、SSI(SSI0)、I2C(I2C0)、以太网下载程序,但是并不支持USB DFU 和CAN 方式。
    再回答第二个问题。
    要想弄清楚如何使用内部Boot Loader,我觉的有必要先说说内部Boot Loader 是如何工作的。
  我们知道,在MCU 复位后读取0x0000 0000 地址处的数据设置堆栈,在读取0x0000 0004 地址的数据设置PC 值,然后用户程序开始执行了。但是,其实在上电后任何复位内核的复位操作中,MCU内部还悄悄的执行了一些其他的操作。具体来说就是:
  1、先判断ROM 控制寄存器(RMCTL)的BA 位(初始状态为1)的值。如果为1,则将0x0100 0000( 内部ROM 的地址)映射到0x0000 0000 地址,如果位0 则将Flash 映射到0x0000 0000 地址。
  2、因为复位后RMCTL 的BA 位为1,所以此时是将ROM 空间映射到0 地址,执行ROM 启动序列。 而ROM 启动序列的第一步是将BA 位清零,将ROM 映射到0x0000 0000 地址处,将Flash 映射到0 地址出。
  3、设置好ROM 和Flash 的映射关系后就开始读取启动配置寄存器(BOOTCFG)的内容,如果EN 位被置位,那么就判断指定管脚的状态与指定极性相比较。
  4、如果指定的管脚与指定的极性相匹配则执行ROM 中的Boot Loader。
  5、如果管脚的状态与极性不匹配,则检查0x0000 0004 地址的内容来判断Flash 是否已经被编程,如果该地址的数据是0xFFFF FFFF,则表明Flash 没有被编程过,那么执行ROM 中的Boot Loader。
  6、如果0x0000 0004 地址的数据是有效的,则表明Flash 已经被编程了,那么就从0x0000 0000 处读取堆栈指针,从0x0000 0004 处读取PC 值,开始执行用户程序。
   PCB抄板 看了上述启动序列以后我们明白了如下几个问题:
  1、当给MCU 上电以后总是要执行ROM 中的启动序列的。
  2、ROM 的启动序列可以引导ROM 中的Boot Loader 的。
  3、执行内部Boot Loader 是有两个条件的,一个是检测到了指定引脚上的指定电平状态,另一个是内部Flash 没有被编过程。
  4、如果没有设定BOOTCFG 寄存器来检测指定引脚的电平,而Flash 已经被编程了则内部ROM 的Boot Loader 是不会再执行了,除非用JTAG 等调试接口将芯片“解锁”。
    根据以上,我们要想让内部ROM 里的Boot Loader 总是执行。那么最好的,可能也是唯一的方法就是给BOOTCFG 寄存器写入特定的内容来检测某个引脚的电平极性。通过这个引脚的电平极性匹配关系来决定是否用内部ROM 中的Boot Loader 来升级程序还是引导用户程序。


联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.feixindz.com
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信