No.30572 作者:哈佛 邮件:jola2002@163.com ID:29699 登陆:81次 QQ:5822022 -- MSN:jola2005912@hotmail.com 文章数:185篇 最后登陆IP:218.17.158.164 最后登陆:2014/12/16 13:54:00 注册:2005/1/6 19:18:03 财富:1280 发帖时间:2008/2/26 23:09:15 发贴者IP:58.251.87.58 标题:哈佛:Luminary ARM 芯片bootloader用法 摘要:No.30572Luminary ARM 芯片bootloader用法 出厂的芯片内置serial flash loader ,可以使用UART或者SSI来进行烧录 ,当然使用JTAG也可以 。只要被使用过 ,serial flash loader 就不存在了 。 所以,如果你的芯片不是新的,又想通过UART来进行更新软件 ,必须要有Bootloader在芯片里头 。 所以如果是新的芯片,最好先把BOOTLOADER烧到芯片的0x00~0x800位置。 以后的用户应用程序烧到0x800以后的位置 。 如果芯片不是新的,在芯片里头一定要有bootloader 才可以通过UART进行应用程序的更新 。而且更新用户应用程序的时候不要察除bootloader 。 如果芯片不是新的,又没有Bootloader , 那么需要用jtag 先把bootloader烧到芯片0x00开始的位置 ,接着才可以通过uart 来进行update chip . 当芯片里头已经有Bootloader ,并且有用户程序了,只要位址是对的,上电后芯片先读bootloader 然后检查用户程序是否可用,如果可用 就跳转到去执行用户程序了 。所以在bootloader 和用户程序都存在的情况下要想通过uart 进行芯片的自编程或者说自更新 ,就需要在你的用户程序上用事件触发调用bootloader : int main(void) { // // Set the clocking to run directly from the crystal. // SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ); //这里使用的时钟是直接从外部晶振取,没有enable PLL 。实际应用中是经常要PLL的 // // Enable the UART and GPIO modules. // SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); // // Make the UART pins be peripheral controlled. // GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); // // Configure the UART for 115,200, 8-N-1 operation. // UARTConfigSetExpClk(UART0_BASE, 6000000, 115200, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); [color=#A52A2A]//注意这个 ......
>>返回讨论的主题
|