原帖由 Yawness 于 2011-9-27 17:39 发表 我试过好几种组合了,一直都没有让人惊喜的反应
我这边有惊喜耶,用EK-LM3S811的串口Bootloader下载成功了,而且操作很简单,不过,都是基于MDK的,而且是UART方式,IAR的ICF文件(旧版本是xcl)不知道怎么弄。
步骤:
1、到https://bbs.eeworld.com.cn/thread-290441-1-1.html下载并解压光盘文件:G:\Tools\StellarisWare\StellarisWare_for_EK-LM3S811.zip
2、打开工程文件StellarisWare_for_EK-LM3S811.zip\StellarisWare_for_EK-LM3S811\boards\ek-lm3s811\boot_serial\boot_serial.uvproj,修改StellarisWare_for_EK-LM3S811.zip\StellarisWare_for_EK-LM3S811\boards\ek-lm3s811\boot_serial\bl_config.h一些注释,根据实际需要的GPIO触发Bootloader的引脚配置,这里使用板载的USER按键S2,连接与PORTC的PIN4,具体如下:
Line243:取消注释#define ENABLE_UPDATE_CHECK
Line257:取消注释并修改为#define FORCED_UPDATE_PERIPH SYSCTL_RCGC2_GPIOC
Line271:取消注释并修改为#define FORCED_UPDATE_PORT GPIO_PORTC_BASE
Line282:取消注释#define FORCED_UPDATE_PIN 4
Line294:取消注释#define FORCED_UPDATE_POLARITY 0
部分如图:
3、修改后保存并重新编译一下工程,至于编译可能会提示的如下Error:
Build target 'boot_serial' User command #1: armcc --device DLM -I . -E -o bl_config.inc ..\..\..\boot_loader\bl_config.c --- Error: User Command terminated, Exit-Code = 1 Target not created
解决方法是:双击左侧工程栏的bl_main.c,激活该C文件,不要直接点Rebuild,要点Translate(默认快捷键Ctrl+F7),编译结果会有如下提示:
compiling bl_main.c... ..\..\..\boot_loader\bl_main.c - 0 Error(s), 0 Warning(s).
然后,再点Rebuild,就可以编译工程了,编译结果如下所示:
Build target 'boot_serial' User command #1: armcc --device DLM -I . -E -o bl_config.inc ..\..\..\boot_loader\bl_config.c compiling bl_autobaud.c... compiling bl_can.c... compiling bl_check.c... compiling bl_decrypt.c... compiling bl_enet.c... compiling bl_flash.c... compiling bl_i2c.c... compiling bl_main.c... compiling bl_packet.c... compiling bl_ssi.c... assembling bl_startup_rvmdk.S... compiling bl_uart.c... compiling bl_usb.c... compiling bl_usbfuncs.c... linking... Program Size: Code=1268 RO-data=4 RW-data=20 ZI-data=272 User command #1: fromelf --bin --output .\rvmdk\boot_serial.bin .\rvmdk\boot_serial.axf ".\rvmdk\boot_serial.axf" - 0 Error(s), 0 Warning(s).
4、编译成功之后,先用LM Flash Programmer 擦除芯片,然后把刚刚修改过的boot_serial\boot_serial.uvproj编译结果给下进去,UART的Bootloader就下载完成了,以后通过串口来更新程序,只需要复位的时候,按下板上的S2键就可以触发Bootloader通过串口来下载了。注意:根据刚刚工程文件的bl_config.h中Line79的#define APP_START_ADDRESS 0x0800可知,我们用户的程序是从0x0800开始的,所以用LM Flash Programmer下载的时候,记得设置偏移地址为0x800,如下图:
5、除了设置偏移地址,同样我们自己建立的工程也要修改一下SCT文件,这里以StellarisWare_for_EK-LM3S811.zip\StellarisWare_for_EK-LM3S811\boards\ek-lm3s811\boot_serial\blinky.uvproj为例:截图SCT1中复件 blinky.sct是默认的SCT文件,截图SCT2中blinky.sct是我们使用Bootloader时用的SCT文件,都是修改了由bl_config.h里决定的App偏移地址0x800。通过这样修改的工程,编译出来的程序通过UART下载后复位就可以运行了。
Bootloader对应的SCT文件如下:
LR_IROM 0x00000800 0x0000f800 { ; ; Specify the Execution Address of the code and the size. ; ER_IROM 0x00000800 0x0000f800 { *.o (RESET, +First) * (InRoot$$Sections, +RO) }
; ; Specify the Execution Address of the data area. ; RW_IRAM 0x20000000 0x00002000 { ; ; Uncomment the following line in order to use IntRegister(). ; ;* (vtable, +First) * (+RW, +ZI) } } |