LPC1100處理器通過(guò)SD卡實(shí)現(xiàn)IAP功能
代碼:本文引用地址:http://www.biyoush.com/article/201611/322352.htm
uint32 BlankChk(uint8 sec1, uint8 sec2)
{
}
5.比較<地址1><地址2><字節(jié)數(shù)>
代碼:
uint32 DataCompare(uint32 dst, uint32 src, uint32 no)
{
}
有上面的幾個(gè)函數(shù)后,下面就可以根據(jù)需要編寫(xiě)SD卡升級(jí)函數(shù)了:
1.定義用戶程序地址
定義用戶程序的起始地址,用戶可以根據(jù)自己的實(shí)際情況設(shè)定,一般都從0x0000 0000開(kāi)始存放IAP代碼,之后的空間才是存放用戶代碼的。
代碼:
#define APP_CODE_START_ADDR
2.從SD卡中讀寫(xiě)bin文件更新升級(jí)
從SD卡中升級(jí)程序很簡(jiǎn)單。流程是:從SD卡中打開(kāi)升級(jí)文件,每次讀取512字節(jié),然后寫(xiě)入Flash,直到編寫(xiě)完成。
IAP支持256/512/1024/2048/4096等多字節(jié)編程方式,只是SD卡每扇區(qū)大小一般都是512字節(jié),所以這里使用512字節(jié)為單位進(jìn)行編程。
代碼:
uint8 UCSDCardProgram(uint8 *fileName, uint8 *buf)
{
uint32 addr = 0;
FATFS fs;
FIL file;
UINT br;
FRESULT res;
}
3.主函數(shù):
主函數(shù)實(shí)現(xiàn)按鍵掃描,如果有按鍵,進(jìn)行SD卡升級(jí),如果沒(méi)有按鍵直接跳轉(zhuǎn)到應(yīng)用程序。
代碼一開(kāi)始判斷按鍵,所以一般都是需要按下按鍵后復(fù)位系統(tǒng),當(dāng)然也可以適當(dāng)循環(huán)掃描按鍵的次數(shù)。等待一定的時(shí)間。。。。。。。
代碼:
int main(void)
{
}
到此IAP程序完成了,下面就是編寫(xiě)應(yīng)用程序了。。。。。。。。。。。。。。。。。。。。。。
應(yīng)用程序編寫(xiě):
應(yīng)用程序編寫(xiě)沒(méi)有什么特殊的,只是需要注意幾個(gè)地方的設(shè)置
1.設(shè)置編譯地址:
2.編譯設(shè)置
設(shè)置NO_CRP條件編譯,否則程序編譯會(huì)出錯(cuò),此字段在啟動(dòng)代碼中使用,如果要加密代碼,此段號(hào)也需要設(shè)置。
3.生存bin文件
設(shè)置bin文件生成命令,具體的設(shè)置方法請(qǐng)看<
4.編寫(xiě)應(yīng)用程序,并把bin文件存放SD卡中,運(yùn)行IAP升級(jí)程序。
具體的升級(jí)過(guò)程:
1.把IAP程序下載到板子上。
2.編寫(xiě)并編譯好應(yīng)用程序,需要是的bin文件。
3.把應(yīng)用程序的bin文件拷貝到SD卡中。
4.在板子上插入SD卡,并按下按鍵重啟系統(tǒng)。
5.板子就會(huì)自動(dòng)實(shí)現(xiàn)升級(jí)并跳轉(zhuǎn)到應(yīng)用中運(yùn)行。
評(píng)論