电调在线升级原理
在线升级就是运行DSP自身的程序,通过串口接收应用程序然后烧写到FLASH中,然后跳转到应用程序中执行,具体实现就是在flash中固化一段串口升级引导程序,相当于自己写一个bootloader。
系统复位之后首先运行这一段串口升级引导程序,并且在这个串口升级引导程序里面会有一个定时函数,如果在规定的定时时间里面收到用户的命令字符A或者a就会进入串口升级模式,如果在规定的定时时间里面没有收到任何命令字符,那么定时时间到了之后,在这个定时器的中断处理函数里面有一个跳转指令,直接跳转到应用程序开始执行,升级程序的流程图如下图所示:
当接收到命令字符A或a之后就会进入升级模式,然后根据输入的不同的字符选择进行不同的操作,如果收到字符U就会进入密码解锁程序,用来输入密码解锁相应的FLASH,如果收到字符F就会进入串口升级子程序,可以将用户程序通过串口下载到FLASH 的相应位置,当接收到字符j时会直接跳转到用户程序开始执行。
存储空间分配如下表所示:
串口升级子程序会存放在起始地址为0X3F0000的flash里面,用户程序存放在起始地址为0X3F2000的FLASH里面,L0 SARAM的4K X 16bits作为接收用户程序的buffer,进入串口升级子程序之后首先会擦除FLASH的C、B、A三个区域,擦出成功之后会提示用户开始输入用户程序。
完成用户程序的下载之后,需要跳转到用户程序开始执行,这里把用户程序的起始地址写在0x3F7F7E处,当需要跳转到用户程序的时候,先跳转到0x3F7F7E处,执行这里的跳转指令然后跳转到用户程序。
CCS在编译的时候,会把入口地址保存在0X3F7FF6那里,上电之后会根据0X3F7FF6那里保存的入口地址去执行,在这个例子中这个也就是bootloader的入口地址,然后电调的入口地址会保存在0X3F7FFE那里,在接受完电调程序之后,我们会把电调程序的入口地址写到0X3F7FFE,然后升级完成或者定时时间到了之后会跳转到0X3F7FFE取入口地然后执行。
作者:cumtchw
出处:http://www.cnblogs.com/cumtchw/
我的博客就是我的学习笔记,学习过程中看到好的博客也会转载过来,若有侵权,与我联系,我会及时删除。