zyh_126

lm3s9b96 boot loader

0
阅读(3672)

实现lm3s9b96上边使用串口进行程序下载的成果,由于在这个过程中自己碰到了很多困难,这里详细说明一下,希望给其他新手一点参考。只需要使用一次rs lmlink.

大致的步骤是,先下载boot loader到板子里,然后拔下lmlink,给某个端口高过低电平,复位,现在板子里运行的就是bootloader自己了,就可以通过lm flash programmer下载程序了。

使用RV MDK打开boot_usb项目。打开bl_config.h文件。

对以下宏进行操作。当你打开bl_config.h文件找到下边的被注释了的宏定义之后就能找到相应的英文说明。

ENABLE_UPDATE_CHECK, 只需要有定义就行。

FORCED_UPDATE_PERIPH, 所需使能的外设,如 SYSCTL_RCGC2_GPIOH

FORCED_UPDATE_PORT, 所需使能的GPIO口基址,如 GPIO_PORTH_BASE

FORCED_UPDATE_PIN, 所使用的针脚,如 7(0-7)

FORCED_UPDATE_POLARITY, 所使用的参考极性。 如 0(低电平)

FORCED_UPDATE_WPU或者FORCED_UPDATE_WPD 定义上拉下拉电阻之一。

配置正确的APP_START_ADDRESS和VTABLE_START_ADDRESS,我用的是0x1800

现在试着结合板子的启动过程,解释以下以上这些定义(#define)的意义。

先说bootloader的工作原理,bootloader开始执行的时候,先会检测FORCED_UPDATE_PORT 口的FORCED_UPDATE_PIN针脚的值是否与FORCED_UPDATE_POLARITY相等。

若相等,则认为此时要下载程序。就做好下载程序的准备,准备跟串口通信。这时windows设备管理器里会出现相应的设备(驱动也在光盘里,解压SW-USB-windrivers-6075.zip,安装驱动大家都会吧)。同时可以用lm flash programmer下载程序,dfu选项里刷新就能找到设备。(至于怎样使这个相等条件成立先问继续说)。

若不相等,则bootloader会验证flash里边APP_START_ADDRESS处(一定要牢记这个数值)是否有没有可用的程序。大致的方法是,如果APP_START_ADDRESS相关处(这里笔者只知道是某个地方,应该与APP_START_ADDRESS相关,具体是什么不知道)的值都为1(flash erase的时候会全部变成1),则认为flash里边没有可以执行的程序,执行bootloader,可下载程序(可以推断,flash全盘erase之后,即使相应管脚的值不匹配,那么也会执行bootloader,可以通过lm flash programmer编程了)。如果不是全1,则认为可以执行,则装载相应的处理器PC值开始执行。

 

板子里有rom,有flash。文档里说rom里有出厂的时候预置的bootloader(还有driverlib,safeRTOS,AES,CRC等,这里只关注bootloader),板子加电启动的时候,先运行rom里的bootloader,检测flash里边有没有程序。如果有则执行,如果没有则执行bootloader,可以写程序。(这点我没有验证出来bootloader是否执行),因为文档告诉我,rom里的bootloader不能通过dfu模式给flash编程。重点来了,现在我们先用rs lmlink把另一个bootloader(配置正确)放在flash里边,则rom里的bootloader会认为flash里边有正确的程序可以执行,装在PC值,然后执行flash里的程序,就是我们放进去的bootloader。我们放进去的bootloader也会检测某个管脚是不是某个值(这些都是在上边的bl_config.h里边定义的)。我观察我的板子上边的那些针脚,ph7(相关的定义为:GPIO_PORTH_BASE,7)与接地管脚非常近,由于没有线,顺手用一个挖耳勺接通它俩的,奸笑ing。

大致为以下几步。

1.修改boot_usb里的bl_config.h

 

2.编译,download(执行该步骤前最好erase一下),复位。取下re lmlink.

3.连接第一步骤中定义的管脚和接地或VCC,同时复位。

4.设备管理器会出现firmware upgrade设备,安装驱动。

5.打开自己的项目选项,切换至target选项卡,进行如下设置。

切换至linker选项卡,

点击edit选项,推出选项。修改sct文件如下,x主要是LR_IROM后边的0x1800和ER_IROM后边的0x1800。

切换至User选项卡,配置如下。

然后alt->p->r.

6.打开lm flash programmer.

Configuration选项卡,QuickSet使用Manual Configuration。Interface选择USB DFU。如果前边顺利,能看到一个相关设备。

Program 选项卡, 找到对应的bin文件,设置偏移量,为上文中提到的APP_START_ADDRESS也是sct文件里配置的那个。

点击program。

7.成功。

 

选择不同的项目进行测试。

每次有新的项目,一定要设置好。整个过程的关键点应该是是那个APP_START_ADDRESS。到处要一样。