TIVA TM4C1294XL 官方bootloader例程测试方法(串口更新部分)

最近的项目用到Ti的TM4C1294,头一次调TI的M4,在调试bootloader的卡住了,主要是官方例程中的bootloader不知道要如何使用。官网上有bootloader的document。但是只是写的了原理和用到的函数说明,并没有对于官方例程的使用有说明。我在网上找了挺久,有零星的人问使用的问题,但是并没有对应的回答,也无后续。没办法,只能自己啃代码。。。。

首先官方例程中有给出相关的例程源码。我用的软件包版本是TIVAWare2.1.4.178,我的开发板是ek-tm4c1294xl,所以软件包安装完成后例程位于SW-TM4C-2.1.4.178\examples\boards\ek-tm4c1294xl\下。与bootloader相关的有五个目录,分别对应串口更新与网口更新两个部分,对应串口的是boot_serial,boot_demo1和boot_demo2。其中boot_serial是bootloader本身,boot_demo1和boot_demo2是两个跑马灯例程,一个闪LED1,一个闪LED2,主要就是演示下载不同固件用的。另外透过bootloader下载更新固件还需要用到TI的LMFlashProgrammer这个工具,TI官网有下载。

我先打开了boot_serial目录,发现这个目录下面只有一个 bl_config.h文件,没有其它C文件和h文件,好奇怪。幸好有工程,我用IAR打开ewarm工程,发现工程里有一堆头文件与源文件,查看了一下属性,原来这些文件都存在SW-TM4C-2.1.4.178\boot_loader\下,看来不同的开发板这部分都是通用的。然后我想找一找main函数看看bootloader的工作过程,这些个源文件与头文件找了一圈,也没有发现main函数的身影,试着编译一下,发现可以编译也可以生成bin文件,见鬼了,难道它不用main也能工作?想了半天,没有头绪。看了看工程里还有一个bl_startup_ewarm.S的汇编程序,只能硬着头皮去看看这个汇编里面有什么了。

打开 bl_startup_ewarm.S,大体上这个文件的内容和一般工程s文件差不多,就是向量表的定义和中断函数的内容。但是一般的s文件中会有对main函数的调用,但是bl_startup_ewarm.S中没有,看来可能是为了缩小bin文件的体积,主函数就直接用汇编写了。对于M4来说,汇编就是只是定义了向量表和几个中断函数,这个文件也一样。我对M4的启动过程只是大体上知道首先要找到主堆栈的地址来设置MSP,它对应向量表的地址0,然后就调用入口地址,一般是向量表的第一个表项,就是地址4的位置,一对照文件中,果然就是Reset_Handler。这个Reset_Handler在文件中有汇编的实现,大致看了一下,大体上就是先将flash中bootloader的代码拷贝到ram中,然后跳转到ram中,相当于从ram中开始执行,然后会调用CheckForceUpdate函数来判断是进入UpdateFW过程还是正常启动Application。这个CheckForceUpdate在bl_check.c中有定义,应该可以依情况自己修改。如果要进入UpdateFW过程,那么就会依据 bl_config.h中的一些开关宏定义来确定初始化哪些外设。我的这个版本支持Ethernet,CAN,USB和Serial,Serial中又包含UART,SPI和I2C,例程中的 bl_config.h打开的是UART开关,初始化完外设就会进入Updater函数,也是分了以上四类,这个Updater函数在bl_main.c中有实现,就是说TI已经实现好的,有需要的话也可以自己修改。Updater执行完成FW更新也就完成了。然后就是重新设置量表指向更新好的Application,从Application启动,完事儿。好像说得简单了,其实还有别的一些内容,有时间再详写吧。

bootloader部分就这样了,boot_demo1和boot_demo2没什么说的,就是两个跑马灯,主要是这两个程序的初始地址需要设置。默认情况下M4是从地址0启动的,但是地址0已经被bootload用了,所以Application就需要向后错一个位置存放,等bootload启动后再跳转到这个位置以启动Application。在bl_startup_ewarm.S有一个宏定义APP_START_ADDRESS,应该就是存放Application的起始位置。这个宏实际是在bl_config.h中定义的,默认是0x4000,所以在Application 的IAR工程的icf文件中需要将flash的存放位置的起始修改为0x4000。我用的IAR,如果编译工具用的CCS或者MDK需要修改对应的配置文件。

define region FLASH = mem:[from 0x00004000 to 0x000fffff];

官方例程boot_demo1和boot_demo2中这部分已经修改好了,直接用就行。此时bootloader,demo1和demo2的bin文件已经编译出来了,要怎么用呢。其实我也摸索了好久,直接说结果吧。首先将bootloader.bin,和demo1先后下载到开发板上,可以直接用开发环境+编程器下载。此时连接串口,TM4C上默认使用UART0。打开LM Flash Programmer,选择Manual + Uart方式,如下图所示

TIVA TM4C1294XL 官方bootloader例程测试方法(串口更新部分)_第1张图片

然后切换到program页,打开demo2.bin,注意address offset要设置为0x4000。

TIVA TM4C1294XL 官方bootloader例程测试方法(串口更新部分)_第2张图片

此时按住开发板的上的sw1按钮,如果是自己做的板子请拉低PJ0,如果用别的pin可以自己修改源码,再点击program按钮就可以通过UART进行FW的更新了。。。。。

呼呼,码字不易,转载请注明。

你可能感兴趣的:(TIVA TM4C1294XL 官方bootloader例程测试方法(串口更新部分))