This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
手头上有一块Tiva LanuchPad的板子,这两天一直在调试BootLoader的功能。参考TivaWare_C_Series-2.1.0.12573\examples\boards\dk-tm4c123g下的boot_serial,boot_demo1,boot_demo2进行了实现,现有如下问题:
1、通过CCS把boot_serial和boot_demo1按先后顺序下载到芯片上,可以通过LM Flash Progarmmer进行串口更新,但是我把系统断电或复位后,就无法进行串口更新了,不知道这是为什么。为了看到程序的状态,我在boot_serial中启用了BL_HW_INIT_FN_HOOK宏,编写了MyHwInitFunc这个函数,让LauchPad上Led点亮延迟熄灭;在boot_demo1在点亮了另外一只LED,把这两个程序先后下载后,均运行正常,灯正常显示,串口可更新,但断电后上电没有任何灯点亮。这时候我再烧写一变boot_demo1,boot_demo1程序上的灯点亮了,串口又能更新,说明boot_serial没有被刷写掉。按照手册,我认为系统上电后应调用boot_serial,由于这时不需要更新,就会去运行boot_demo1,然后由boot_demo1将系统强制进入到更新状态。不知道我这样理解是否正确,刷写boot_demo1的flash偏移地址是0x00002800。
2、能够自己编写一个类似LM Flash Progarmmer的程序,ti是否有相关的参考程序。
3、boot_serial这类程序如何调试,我看英文论坛上有说明,但尝试后不正确。
谢谢!其实前面发了一个帖子,修改了一下,居然要去找版主认证,第一次看到论坛有这样设定。再重新发了一遍。
Hong
1. 你的理解是正确的,该例程是flash based的bootloader。如果想在第一次使用bootloader之后再次烧写程序,你需要在你通过串口更新的的应用程序里面加入串口配置,然后强制进入bootloader。配置参考boot-demo1即可。
2. 想要编写相关的升级程序,请参考bootloader user's guide,按照相应的协议发送数据即可。
user's guide 的下载地址:
http://www.ti.com/lit/pdf/spmu301
谢谢您的回答。可能我没有把问题描述清楚,我通过CCS先把boot_serial下载下去,然后再把boot_demo1下载下去,这时程序运行正常,只要系统不断电,我可以通过LM Flash程序把boot_demo1和boot_demo2的bin文件反复的下载下去;但是我断电后,再上电,就无法再次更新了,无论我是用CCS先后下载的boot_serial和boot_demo1,还是下载后同LM Flash通过串口更新boot_demo1.bin或boot_demo2.bin文件,都无法更新。按照正常的流程,我在系统进入到Update时会点亮一盏Led,断电后却不会出现这一现象,说明程序在断电后没有正常的进入到0x00002800去调用应用程序。
所以我的问题是,boot_serial和boot_demo1下载后,断电后再上电,无法通过串口更新程序。从实验现象来看程序也运行的不正常,感觉boot_serial这个程序没有正常的执行,这是为什么。
您所说的“你需要在你通过串口更新的的应用程序里面加入串口配置,然后强制进入bootloader”,应该是指对应用程序的要求,也就是自己去编写应用程序,需要按照boot_demo1的格式吧。
上两张图说明一下吧,下载完boot_serial和boot_demo1,绿灯亮起,表示系统进入到Update状态,这时可更新;如果下载完boot_serial和boot_demo1,断电再上电,灯就不会亮了。
Hong
在使用LM Flash烧写boot_demo1和boot_demo2的时候,‘Program’选项卡的Program address offset要设置为0x2800。boot_serial设置为0x0。
下面附三个bin文件。
首先,使用LM flash programmer的JTAG mode将boot_serial(Program address offset=0)和boot_demo1(Program address offset=0x2800)。
然后,使用串口下载轮换烧写boot_demo1和boot_demo2,Program address offset设置为0x2800。
经过测试没有问题。
用ROM_UpdateUART模式重新写了一个更新程序,一开始也始终不行,吃完饭下载了一遍,突然可以了,泪流满面啊。诡异的Tiva M4啊,不知道问题出在那里。放上代码吧,注意ROM_UpdateUART不用下载boot_serial,和通常的应用程序一样写,flash偏移位置0x0000000。
代码如下:
#define TARGET_IS_BLIZZARD_RB1 #include <stdint.h> #include <stdbool.h> #include "inc/hw_types.h" #include "inc/hw_memmap.h" #include "inc/hw_nvic.h" #include "driverlib/sysctl.h" #include "driverlib/gpio.h" #include "driverlib/rom.h" #include "driverlib/uart.h" void JumpToBootLoader(void) { // // We must make sure we turn off SysTick and its interrupt before entering // the boot loader! // ROM_SysTickIntDisable(); ROM_SysTickDisable(); // // Disable all processor interrupts. Instead of disabling them // one at a time, a direct write to NVIC is done to disable all // peripheral interrupts. // HWREG(NVIC_DIS0) = 0xffffffff; HWREG(NVIC_DIS1) = 0xffffffff; ROM_UpdateUART(); } void SetupForUART(void) { ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); // Configure the UART for 115200, n, 8, 1 ROM_UARTConfigSetExpClk(UART0_BASE, ROM_SysCtlClockGet(), 115200, (UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE | UART_CONFIG_WLEN_8)); // // Enable the UART operation. // ROM_UARTEnable(UART0_BASE); } int main(void) { int i; ROM_SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3); ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0x02); for(i=0;i<50;i++) ROM_SysCtlDelay(100000); SetupForUART(); ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0x04); JumpToBootLoader(); while(1) { } }
诡异的问题再继续调试吧。
看起来代码问题不大。建议配置UART的时候加上
ROM_GPIOPinConfigure(GPIO_PA0_U0RX);
ROM_GPIOPinConfigure(GPIO_PA1_U0TX);
你好,我也遇到了类似的问题,想请教一下你,我想用I2c的方式支持在线升级应用程序。
如果我也用这个帖子的这种方法也可以吗?我使用的是Tm4c1230H6PM芯片,和keil环境。如果我也使用boot_serial和boot_demo1的话,然后支持I2C在线升级的话我应该做怎样的改变呢?我现在还不清楚怎样配置。
我用的是另外一种方法写程序,也遇到了问题,想请教与你,我也发了帖子,链接是:http://www.deyisupport.com/question_answer/microcontrollers/tiva_arm_cortex/f/96/t/83072.aspx
或者是我应该用哪种方法呢,我觉得本帖子讨论的方法比较好,谢谢你!希望你能帮我一下,谢谢!
您好,我用您上面说的方法给手上的tm4c123g的launchpad下载您给的bin文件发现出现了和版主一样的的问题,已经把Disable Auto Baud Support勾选去掉,串口下载的时候用的是usb-ttl的rx、tx分别连接到板上的PA0、PA1,是我的连接有问题吗?望指教,谢谢!
Wellin Zhang您好,能否求一份EK-TM4C1294XL的bootloader,我的ccs下载安装失败,我只需要一份bootloader,所以能不能麻烦您给我一份bootloader的bin文件。谢谢!