本篇文章是《LPC技術小貼士-自動添加中斷向量校驗位》的番外篇。
最近在支持客戶的時候遇到這樣一個問題:客戶在做自己的二級boot loader,并且在使用LPC54608 IAP功能,編程sector0中的page0時候總是失敗(返回0x21錯誤碼),但是編程任何其他page的時候,都沒有問題(客戶的代碼在最后一個sector里,不編程)。
問題乍一看比較詭異,因為只有page0會出問題,對其他page的操作都是沒有問題的,并且擦除page/sector也沒有問題,只有編程操作會出錯。
經過了一段短暫的討論,最后把問題鎖定在了LPC中斷向量表的check sum校驗機制上:LPC(除比較新的LPC5500系列外)基本都需要在中斷向量表的第8個位置上填入前7個中斷向量的校驗和,關于校驗和的具體內容可以參考開篇提到的文章。
在Keil編譯出來的.bin文件中,默認并沒有自動添加這個校驗和,所以每當調用IAP變成page0的時候,IAP程序內部都會檢查這個校驗和,一旦校驗和錯誤(比如全0) 就會返回失敗。
解決方法也很簡單,就是在每次編程page0的時候都計算下校驗和即可,這里直接給出計算校驗和的代碼:

adr為編程地址,當adr為0時既編程page0區域,紅框內的代碼就是計算校驗和,并且把校驗和填到中斷向量表的第8個位置上。
加上這段計算校驗和代碼后,問題迎刃而解。這個問題普遍存在于除LPC5500系列外幾乎所有老的LPC型號上,希望本文章對大家開發LPC MCU有所幫助!
責任編輯:haq
-
plc
+關注
關注
5051文章
14595瀏覽量
486980 -
編程
+關注
關注
90文章
3716瀏覽量
97192
原文標題:LPC工程小貼士:IAP編程page0返回失敗的問題
文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
探索LMK61E0M:超低抖動可編程振蕩器的卓越性能與應用
為什么你的產品總是在EMC測試中失敗?如何規避認證失敗?
?LMK61E0M可編程振蕩器技術文檔總結
uffs文件系統掛載nand0設備后,所有塊全變成壞塊了,是什么原因導致的?
LP-MSPM0G3507 LaunchPad?開發套件技術解析與應用指南
求助,關于TLE9883 user_nvm_sector_erase的問題求解
rtt only系統下程序運行失敗: [FATAL ERROR] Exception 13:Load Page Fault,怎么解決?
FX3 RAM編程因定制板而失敗怎么解決?
I2C EEPROM編程失敗的原因?
新品 | RA0系列MCU喜添新成員RA0E2,0.25uA超低功耗待機,支持5v、125c
用STM32F407讀取ADS8353的結果總是為0
MSPM0L1227 32MHz Arm? Cortex-M0?+ MCU數據手冊
編程sector0中的page0時候總是失敗問題
評論