LPC17XX系列ISP升级流程

ISPLPC17XX系列ISP升级流程

说明:在ubuntu下通过“U转串”模块跟LPC17XX开发板的UART0连接上,通过ISPLPC程序升级。

ISP命令及升级流程简要说明:参考相关文档

http://wenku.baidu.com/view/2f95ba17866fb84ae45c8de5.html

注:对于不同型号的LPC进入ISP的方式会不一样,例如在复位后,要拉低ISP引脚:11XX系列是PIO0_117XX系列是PIO2_10。此平台搭建的ISP模式是,用keil或其他Flash Magic软件把LPCFlash擦除干净,上电复位后自动进入ISP

ISP升级简要流程说明:参考网上相关文档

http://bbs.dzsc.com/space/viewspacepost.aspx?postid=91894

数据长度是本行发送的原始数据的长度,校验和是原始数据的和。要先将数据长度转化UU编码再发送,不要跟原始数据一起赚UU编码。

发送“W”,写RAM多少字节数据时,如果满一个扇区就写4096(然后固化Flash,继续发“W”写命令,继续发送数据),如果不满4096,就要写实际的数据长度。其实总的来说就是实际数据长度(“W”命令 + 数据长度)。

HEX文件了解:

http://baike.baidu.com/view/1229888.htm

HEX文件中,读出的数据是ASCII,要转化为十六进制发送,从HEX文件读出的数据是一个字节分为两位,“高、低,高、低”这样排列,要将两个数据合并为一个。

注意:往LPC里头写的是数据,以上文档说到的“00”。

还有一点注意的是,可能往LPC里面写数据成功了,但有Flash里面的成了运行不了的情况。其原因是HEX文件开头的“8个中断向量的校验和”(注意,LPC寄存器是32位的)。因为LPC在冷启动或复位的时候,BOOT代码会首先计算Flash扇区0中前8个中断向量的校验和,如果为0(大概是表示有程序的意思),就把执行控制权转移给用户代码,程序才会运行。而我们在用keil编译器编译出来的binhex文件(顺便提一下,keil的烧写是IAP),它的检验和位置没有填充值(第八个中断向量)。而我们使用K-Flash或者Flash Magic进行ISP烧写,又或者使用仿真器AK100CK100编程时,由其编程算法校验并填充了第八个中断向量,然后ISP烧写。这引起了校验芯片内的代码和原始的binhex文件对比时,会提示4个字节的不一致,导致程序不能运行。

因此注意修改第八个中断向量的值,领前8个中断向量加起来和为0

注意:以上参考资料说的比较笼统,具体过程自己可用Flash Magic软件往LPC里面烧写程序,然后跳出串口线什么的,看往里面写了些什么,及返回了些什么。

程序代码就不贴了,知道这个过程,仔细琢磨就很容易写出来。

你可能感兴趣的:(技术)