通過 IAP,用戶可以使用片內(nèi)Flash 作為非易失性數(shù)據(jù)存儲器,存儲一些設(shè)備的配置信息。這樣不僅可以節(jié)約成本,而且還可以減小線路板的面積。
利用IAP 將Flash 作為數(shù)據(jù)存儲器時,用戶需要控制自身代碼量的大小及代碼定位。絕對不能夠出現(xiàn)Flash 數(shù)據(jù)區(qū)和Flash 代碼區(qū)重疊的現(xiàn)象。因為在利用IAP 向片內(nèi)Flash 存儲器寫入數(shù)據(jù)時,需要對數(shù)據(jù)扇區(qū)進行擦除。如果數(shù)據(jù)區(qū)和代碼區(qū)重合,就有可能會破壞系統(tǒng)的代碼空間,造成系統(tǒng)死機或崩潰。
一、編程片內(nèi)Flash 的步驟
使用 IAP 函數(shù)對片內(nèi)Flash 執(zhí)行編程操作時,需要按以下步驟進行操作。
(1)確定參數(shù)
在使用 IAP 代碼之前,需要定義一些常量,如系統(tǒng)時鐘、IAP 函數(shù)入口、IAP 入口緩沖區(qū)和出口緩沖區(qū)等。
(2)選擇扇區(qū)
對某一個扇區(qū)執(zhí)行擦除、寫入等操作之前,必須先選擇該扇區(qū)。但也可以一次選擇多個扇區(qū)。
(3)擦除扇區(qū)
同其它的 Flash 芯片一樣,LPC2300 的片內(nèi)Flash 在寫入數(shù)據(jù)前也需要執(zhí)行擦除操作。
不過這一步是可選的。如果目標(biāo)區(qū)域已經(jīng)被擦除了,那么就不必重復(fù)擦除,直接寫入數(shù)據(jù)即可。擦除操作一次可以擦除多個扇區(qū)。
(4)編程Flash
以上幾步執(zhí)行完畢后,就可以編程Flash 了。執(zhí)行編程扇區(qū)的操作時,IAP 函數(shù)會將RAM中的數(shù)據(jù)拷貝到Flash 中,此時有幾個限制:
1.Flash 的目標(biāo)地址必須是256 字節(jié)對齊,即目標(biāo)地址[7:0]為0,如下圖所示;
2.RAM 數(shù)據(jù)區(qū)的源地址必須字對齊,即起始地址[1:0]為0,如下圖所示;
3.源數(shù)據(jù)區(qū)必須是局部總線上的 SRAM,不能使用通用USB SRAM 和以太網(wǎng)SRAM;
4.一次寫入的字節(jié)數(shù)固定:256、512、1024 或者4096。
(5)校驗數(shù)據(jù)
IAP 代碼還為用戶提供了一個數(shù)據(jù)校驗的手段,這樣用戶就可以不必自己動手來校驗寫入Flash 中的數(shù)據(jù)是否正確。用戶需要提供目標(biāo)地址、源地址和比較字節(jié)的個數(shù)。注意:源地址、目的地址和比較字節(jié)的個數(shù)都必須是字對齊。
二、程序主體
在這個程序中,我們向扇區(qū)7 寫入512 個字節(jié)的數(shù)據(jù)。
主程序代碼
#define DestAddr 0x00007000 // 扇區(qū)7 的起始地址
/******************************************************************************************
** 函數(shù)名稱:main
** 函數(shù)功能:數(shù)據(jù)存儲解決方案。
******************************************************************************************/
int main (void)
{
__align(4) uint8 SendData[512]; // 定義變量區(qū)
uint32 i;
for(i = 0; i < 512; i++) // 初始化變量區(qū)數(shù)據(jù)
{
SendData[i] = i;
}
SelSector(7, 7); // 選擇扇區(qū)
EraseSector(7,7); // 擦除扇區(qū)
SelSector(7, 7); // 選擇扇區(qū)
RamToFlash(DestAddr, (uint32)SendData, 512); // 寫數(shù)據(jù)到FLASH
while(1);
return 0;
}
三、IAP讀操作
很多資料只有寫,沒有讀操作。寫Flash必須用IAP命令,從Flash中讀取數(shù)據(jù)不需要使用IAP命令,直接通過指針讀Flash絕對地址里的數(shù)據(jù)即可。
volatile const unsigned char *pucdata;
unsigned char ucData = 0;
pucdata = (volatile unsigned int *) 0x00000254;
ucData = * pucdata;
通過以上語句即可將0x00000254地址的數(shù)據(jù)讀取到變量ucData中。
上一篇:lpc54618通過flashmagic工具以isp方式下載程序出現(xiàn)的問題總結(jié)
下一篇:LPC812MO 我的學(xué)習(xí)歷程
推薦閱讀
史海拾趣
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 跟帖留言贏好禮:60年回眸——聊一聊示波器的前世今生!
- 任選下載有禮|《新概念模擬電路》全五冊合集/《ADI 參考電路合集》
- 下載有禮|精華課件匯編:泰克半導(dǎo)體器件的表征及可靠性研究交流會暨吉時利測試測量年度研討會
- 【 有獎直播】 掌握潮流~TI DLP®技術(shù)在汽車上的創(chuàng)新及全新應(yīng)用
- 看專題答題贏好禮!PI 穩(wěn)定可靠的TOPSwitch-JX開關(guān)電源IC
- 有獎直播:基于TI Jacinto™ 的深度學(xué)習(xí)平臺介紹
- 2020-2021年安森美和安富利物聯(lián)網(wǎng)創(chuàng)新設(shè)計大賽
- 2025 英飛凌消費、計算與通訊創(chuàng)新大會(北京站)重磅來襲!
- EEWORLD月度問答榜(第3期)
- 下載《Altera SoC深度體驗》,打分評論贏好禮
- 人工智能崛起,是否會有新的危機出現(xiàn)?
- 從NEC開始,介紹史上多款具有里程碑意義的圖形處理芯片
- 高通5G技術(shù)推動工業(yè)物聯(lián)等行業(yè)發(fā)展應(yīng)用 不局限于手機終端
- 華人機器人專家席寧博士欺詐指控被永久撤銷
- 美郵遞公司UPS向聯(lián)邦政府申請商用無人機送貨
- 甘肅:力爭實現(xiàn)到2020年光伏用戶側(cè)平價上網(wǎng)
- 我國服務(wù)機器人產(chǎn)業(yè)面臨較大機遇和可發(fā)展空間
- 天津眾推科技研發(fā)出智能電話機器人,未來電銷會被機器人代替嗎
- 驚訝!不敢相信,機器人既然可以在任何垂直的表面上畫畫
- 震驚還是荒謬,日本研發(fā)八腳動物型機器人威嚇“熊”