单片机 > 单片机程序设计 > 详情

LPC17XX系列ISP升级流程

发布时间:2020-08-26 发布时间:
|

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


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


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


注:对于不同型号的LPC进入ISP的方式会不一样,例如在复位后,要拉低ISP引脚:11XX系列是PIO0_1,17XX系列是PIO2_10。此平台搭建的ISP模式是,用keil或其他Flash Magic软件把LPC的Flash擦除干净,上电复位后自动进入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编译器编译出来的bin或hex文件(顺便提一下,keil的烧写是IAP),它的检验和位置没有填充值(第八个中断向量)。而我们使用K-Flash或者Flash Magic进行ISP烧写,又或者使用仿真器AK100、CK100编程时,由其编程算法校验并填充了第八个中断向量,然后ISP烧写。这引起了校验芯片内的代码和原始的bin或hex文件对比时,会提示4个字节的不一致,导致程序不能运行。


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


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


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




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
PIC单片机基础知识之二