新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > LPC1100處理器通過SD卡實現(xiàn)IAP功能

LPC1100處理器通過SD卡實現(xiàn)IAP功能

作者: 時間:2016-11-27 來源:網(wǎng)絡 收藏

代碼:

本文引用地址:http://m.butianyuan.cn/article/201611/322352.htm


uint32 BlankChk(uint8 sec1, uint8 sec2)
{
ParamIn[0] = IAP_BLANKCHK;
ParamIn[1] = sec1;
ParamIn[2] = sec2;
(*IAP_Entry)(ParamIn, ParamOut);

return (ParamOut[0]);
}

5.比較<地址1><地址2><字節(jié)數(shù)>

代碼:


uint32 DataCompare(uint32 dst, uint32 src, uint32 no)
{
ParamIn[0] = IAP_COMPARE;
ParamIn[1] = dst;
ParamIn[2] = src;
ParamIn[3] = no;
(*IAP_Entry)(ParamIn, ParamOut);

return (ParamOut[0]);
}

有上面的幾個函數(shù)后,下面就可以根據(jù)需要編寫SD卡升級函數(shù)了:

1.定義用戶程序地址

定義用戶程序的起始地址,用戶可以根據(jù)自己的實際情況設定,一般都從0x0000 0000開始存放IAP代碼,之后的空間才是存放用戶代碼的。

代碼:

#define APP_CODE_START_ADDR0x00006000// 用戶程序起始地址

2.從SD卡中讀寫bin文件更新升級

從SD卡中升級程序很簡單。流程是:從SD卡中打開升級文件,每次讀取512字節(jié),然后寫入Flash,直到編寫完成。

IAP支持256/512/1024/2048/4096等多字節(jié)編程方式,只是SD卡每扇區(qū)大小一般都是512字節(jié),所以這里使用512字節(jié)為單位進行編程。

代碼:
uint8 UCSDCardProgram(uint8 *fileName, uint8 *buf)
{
uint32 addr = 0;
FATFS fs;
FIL file;
UINTbr;
FRESULT res;

DisableIRQ();// 禁止中斷
SectorPrepare(6, 6);// 選擇扇區(qū)
SectorErase(6, 6);// 擦除扇區(qū)
EnableIRQ();// 使能中斷


f_mount(0, &fs);


res = f_open(&file, (const TCHAR *)fileName, FA_OPEN_EXISTING|FA_READ);

if(res != FR_OK)
{
return res;
}
else
{
while (1)
{
res = f_read(&file, buf, 512, &br);// 讀取數(shù)據(jù)

DisableIRQ();
SectorPrepare(6, 6);
RamToFlash(APP_CODE_START_ADDR + addr, (uint32)buf, 512); // 寫數(shù)據(jù)到FLASH
EnableIRQ();
addr += 512;

if ((res != FR_OK) || (br < 512))
{
break;
}
}
}


f_close(&file);// 關閉文件,必須和f_open函數(shù)成對出現(xiàn)


f_mount(0, 0);

return FR_OK;
}

3.主函數(shù):

主函數(shù)實現(xiàn)按鍵掃描,如果有按鍵,進行SD卡升級,如果沒有按鍵直接跳轉(zhuǎn)到應用程序。

代碼一開始判斷按鍵,所以一般都是需要按下按鍵后復位系統(tǒng),當然也可以適當循環(huán)掃描按鍵的次數(shù)。等待一定的時間。。。。。。。

代碼:


int main(void)
{
void (*userProgram)() = (void (*)())OSInit;// 函數(shù)指針

OSInit();// 初始化系統(tǒng)

while (1)
{
if (KeyGetValue())
{
UCSDCardProgram("LPC1114.bin", SDBuf);
}

userProgram = (void (*)())(APP_CODE_START_ADDR + 1);
(*userProgram)();// 啟動程序
}
}

到此IAP程序完成了,下面就是編寫應用程序了。。。。。。。。。。。。。。。。。。。。。。

應用程序編寫:

應用程序編寫沒有什么特殊的,只是需要注意幾個地方的設置

1.設置編譯地址:

設置用戶程序的開始地址,根據(jù)需要設置,一般都在IAP函數(shù)之上,需要適當大于IAP,給IAP自己增加功能提供空間。內(nèi)存也可以適當設置一下,不過一般應用程都沒有完全使用完內(nèi)存,所以不設置也是可以的。

2.編譯設置

設置NO_CRP條件編譯,否則程序編譯會出錯,此字段在啟動代碼中使用,如果要加密代碼,此段號也需要設置。

3.生存bin文件

設置bin文件生成命令,具體的設置方法請看<>:http://bbs.eeworld.com.cn/thread-314169-1-1.html

4.編寫應用程序,并把bin文件存放SD卡中,運行IAP升級程序。

具體的升級過程:

1.把IAP程序下載到板子上。

2.編寫并編譯好應用程序,需要是的bin文件。

3.把應用程序的bin文件拷貝到SD卡中。

4.在板子上插入SD卡,并按下按鍵重啟系統(tǒng)。

5.板子就會自動實現(xiàn)升級并跳轉(zhuǎn)到應用中運行。



上一頁 1 2 下一頁

評論


技術專區(qū)

關閉