很多人在使用IAP时总是出现问题,但却不知道去怎么找问题,下面总结一下一般在使用IAP时会出现的问题和解决方法。
1.通过IAP编程问题?
很多人在第一次使用IAP时都容易怀疑这个问题,因为没有经验,所以对自己没有信心。其实IAP代码都是芯片厂商固化大ROM中的,所以只要按照正确的方法调用,一般是不会出现问题的。不过需要注意几个问题:
a. 时钟参数一定按照当前系统的实际运行时钟传递;
b. 注意返回值是否则正确;
c. 编程扇区大小一定要注意,并不少每个芯片的每个扇区的大小都是一样的大的,一定要看芯片手册了解扇区大小;
d. 编程字节,对于LPC系列芯片来说支持4096,2048,1024,512,256等多种字节的写入,但是绝不能写不支持是字节数。特别是最后一次写入时,大家都容易只写实际字节数(本人就犯过这样的错误,最后一次写入只有240字节时,就写入240字节),这种情况下代码是没法运行的。必须按照256字节方式写入,当然你可以可以按照4096或其他方式写入。
2.APP代码错误?
如果犯了上面的第4中错误,是很难找的问题的,应就算你从芯片中读取编程的代码与原代码进行比较也是正确的,所以一定要特别注意。如果编写没有错误,那么还是不可以正确运行时,我们可以考虑把编程后的代码读取出来,与源代码进行比较,保证代码不在下载过程中出现错误。不过IAP并不支持读扇区的函数,没有不要紧,我们可以通过直接读取直接地址来读取芯片中的代码内容。
3.IAP跳转到APP问题?
在以上两个问题都是正确的时候,最后可能出现的问题就是跳转是否正确。是否跳转到正确的地址上去了,要解决这个问题,最简单的方法就是用仿真的方法实现。为了保证以上两个问题的正确性,我们可以使用JLINK或ULINK等工具先把APP代码编写到高地址上,再通过仿真代码仿真IAP,看是否可以跳转的APP。当然也可以先把IAP编写到底地址,在通过仿真工具仿真看代码是否可以进入main函数。如果能进入,所以IAP的跳转是没有问题的,否则跳转可能出现问题了。
一般情况下,只要保证以上几个问题不出现就不会有问题的。不过有很多人出现以下特别奇怪的问题:
用串口中断接收APP代码,在IAP把APP代码编写进芯片后,APP中调用串口中断就出现问题了,不进中断。
对于这个问题,有不少人出现,不过本人没有出现这个问题,所以不知道为什么会这样。当遇到这个问题,一般的解决方法是,IAP编程成功后不直接跳转到APP,而是是IAP代码出现看门狗复位,重启后直接跳转到APP就可以了。。。 |