最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

Philips LPC2000 內(nèi)部Flash用作EEPROM使用詳解

作者:robinsun 欄目:ARM技術(shù)
PHILIPS LPC2000 內(nèi)部FLASH用作EEPROM使用詳解
折騰了幾天,終于可以用FLASH來代替EEPROM了?偨Y(jié)一下歡迎拍磚。同時感謝北京zlg朱先生的耐心解答。
PHILIPS LPC2000 內(nèi)部FLASH用作EEPROM使用詳解

1.    LPC2000的FLASH簡介
FLASH存儲器系統(tǒng)包含128kB FLASH器件的16個扇區(qū)和256kB FLASH器件的17個扇區(qū)。FLASH存儲器從地址0開始并向上增加。FLASH boot裝載程序同時提供片內(nèi)FLASH存儲器的ISP和IAP編程接口。IAP、ISP和RealMonitor程序都位于boot扇區(qū)。boot扇區(qū)存在于所有的器件當(dāng)中。ISP和IAP命令不允許對boot扇區(qū)執(zhí)行寫/擦除/運行操作。在128kB FLASH器件中只有120kB FLASH可供用戶程序使用。器件共包含256kB的FLASH,其中,248kB的FLASH可供用戶程序使用。Boot Block一般位于片內(nèi)FLASH存儲器頂端。在128kB FLASH中,它是第16個扇區(qū)(對應(yīng)的扇區(qū)號是15),在256kB FLASH中,它是第18個扇區(qū)(對應(yīng)的扇區(qū)號是17)。Boot Block占有的FLASH存儲器扇區(qū)不能用來存放用戶數(shù)據(jù)。
LPC2000系列提供在在應(yīng)用中編程IAP,最終用戶代碼直接執(zhí)行在應(yīng)用編程 (IAP)對片內(nèi)FLASH存儲器進行擦除和編程操作。Falsh可以擦寫10000次,512字節(jié)行編程時間為1ms。單扇區(qū)或整片擦除時間為400ms。
FLASH存儲器在寫或擦除操作過程中不可被訪問。
執(zhí)行FLASH寫/擦除操作的IAP命令使用片內(nèi)RAM頂端的32個字節(jié)空間。如果應(yīng)用程序中允許IAP編程,那么用戶程序不應(yīng)使用該空間。
很多8位單片機中有頁的概念,頁為FLASH編程的最小單位,每次可以擦除和編程一個頁的內(nèi)容,由于頁中包含的字節(jié)較少,在這種情況下把FLASH用作EEPROM靈活性會很好。而LPC2000系列沒有頁的概念,它只有扇區(qū)這個最小的FLASH編程單位,即用戶即使是只修改一個字節(jié),也需要首先擦除8K的FLASH。
FLASH當(dāng)作EEPROM的過程,其實就是對FLASH進行讀-修改-寫的過程。
2.    向FLASH中寫數(shù)據(jù)
FLASH必須遵循選擇扇區(qū),擦除,選擇扇區(qū),寫的過程,具體到程序的編寫,必須先后有下面的代碼:
SelSector(1,1);                           // 選擇扇區(qū)1
   EraseSector(1,1);                         // 擦除扇區(qū)1
SelSector(1,1);                           // 選擇扇區(qū)1
   for(i=0;i<512;i++)
      source[i]=0x41;
   RamToFLASH(0x00002000, (uint32)source, 512); // 寫數(shù)據(jù)到扇區(qū)1
應(yīng)用的時候需要注意下面幾點:
1)如果寫之前沒有選擇扇區(qū),是不能正確寫入的。
2)如果寫之前沒有擦除,寫入是不正確的。
3)最少寫512字節(jié),寫入的字節(jié)數(shù)應(yīng)當(dāng)為512 或 102440968192.
4)FLASH在擦寫時不能訪問,這也是IAP是要關(guān)閉中斷的原因。關(guān)中斷可以用下面的語句來實現(xiàn):__asm{MSR     CPSR_c, #0xdf},與此對應(yīng),開中斷可以下面的語句:__asm{MSR     CPSR_c, #0x5f}。
另外,經(jīng)常有人問如何將一個常量的數(shù)值定義在FLASH的特定地址上,我覺得這個功能不太實用,因為每次擦除的最小單位是8K,到不如直接寫數(shù)據(jù)到FLASH的一個地址,這個地址是在一個空扇區(qū)中,讀和寫都以這個地址為基址。由于編譯后的代碼是向下靠緊的,所以你可以查看一下編譯后的代碼量,然后選擇靠上的地址做為用的變量區(qū)。如果實在想把數(shù)組定義在FLASH的特定位置好像可以用分散加載,具體可以參考zlg的FAQ的第378問。
3.    從FLASH中讀數(shù)據(jù)
FLASH中讀數(shù)據(jù)比較簡單,可以定義一個指針變量,該指針變量指向特定的FLASH地址,例如可以寫成下面的樣子:
uint32 i;
uint8 * p;
p=(uint8 *)0x1C000;
for(i=0;i<400;i++)
{
     Puthexbyte(*(p++));
}
4.    FLASH的加密
代碼讀保護 這是Bootloader修訂版1.61的特性。 代碼讀保護通過向FLASH地址單元0x1FC(用戶FLASH扇區(qū)0)寫入0x87654321(十進制表示為2271560481)來使能。地址單元0x1FC用來允許為fiq異常處理程序保留部分空間。當(dāng)JTAG調(diào)試端口的代碼讀保護被使能時,外部存儲器引導(dǎo)和以下ISP命令將被禁能:
&#61548;    讀存儲器
&#61548;    寫RAM
&#61548;    運行
&#61548;    將RAM內(nèi)容復(fù)制到FLASH
上述ISP命令終止時返回CODE_READ_PROTECTION_ENABLED。 代碼讀保護使能時,ISP擦除命令只允許擦除用戶扇區(qū)的內(nèi)容。這種限制是代碼讀保護不使能時所沒有的。IAP命令不受代碼讀保護的影響。
采用工程模板的RelInFLASH會自動加密。
5.    采用工程模板時需要注意的地方
采用ZLG的工程模板時需要注意下面幾點:
1)修改堆棧,在STARTUP.S文件中的初始化堆棧為 StackUsr-20*4
2)設(shè)置編譯參數(shù)-apcs/intervork,需要注意是修改 Language Settings/ARM C Compiler/ATPS下面的。我一開始的時候不小心選擇的語言設(shè)置是ARM Assembler ,結(jié)果運行程序后一寫FLASH就錯,大家要選準(zhǔn)語言設(shè)置。
3)變量定義,由于一次至少寫512個字節(jié),所以跟讀寫操作的變量最好定義為uint32類型的,我犯的一個錯誤是將變量定義為uint8類型的,如下面:
uint8 i;
for(i=0;i<512;i++)
   source[i]=0x41;
RamToFLASH(0x00002000, (uint32)source, 512); // 寫數(shù)據(jù)到扇區(qū)1
結(jié)果可想而知,一直在for循環(huán)中運行而跳不出來,這到給我們一個IAP不好用的假象。


2樓: >>參與討論
ecjtu
我認(rèn)為還要補充!
 在運行IAP時,是不是還應(yīng)該這樣啊

uint32 MAMCRBAK;
uint32 PLLCONBAK;

__asm{MSR     CPSR_c, #0xdf}
   MAMCRBAK=MAMCR;
   MAMCR=0;
   PLLCONBAK=PLLCON;
   PLLCON=0;
  PLLFEED=0xaa;
  PLLFEED=0x55;
。。。。。。。。。IAP
    MAMCR=MAMCRBAK;
     PLLCON=PLLCONBAK;
     PLLFEED=0xaa;
     PLLFEED=0x55;
__asm{MSR     CPSR_c, #0x5f}



3樓: >>參與討論
zlgARM
版主點評:
歡迎各位熱心網(wǎng)友將自己的心得共享出來,讓大家分享。
幫助別人,也是幫助自己!

歡迎各位網(wǎng)友在這個帖子后面討論和IAP相關(guān)的問題。

4樓: >>參與討論
hhuzhang
謝謝啊, robinsun 和 ecjtu

正是不錯,很多的疑問都解決了,謝謝了啊!呵呵!


5樓: >>參與討論
zhwz12
再想問問:
FLASH里放有程序,在操作IAP時應(yīng)該計算程序空間,在程序空間以外的地址上操作嗎?且在分散加載后地址如何確定?在單片LPC2114系統(tǒng)中。
感謝!

6樓: >>參與討論
hxj830088
請教FLASH用作EEPROM使用
我看了你發(fā)貼子“PHILIPS LPC2000 內(nèi)部FLASH用作EEPROM使用詳解”,還是有點疑問,還希望大蝦多多指教。你能否把你寫的函數(shù),
SelSector(1,1);                           // 選擇扇區(qū)1
EraseSector(1,1);                         // 擦除扇區(qū)1
RamToFLASH(0x00002000, (uint32)source, 512); // 寫數(shù)據(jù)到扇區(qū)1

這三個函數(shù)體發(fā)給在下參考一下,我按照《LPC2119_2129_2194_2292_2294-01使用指南.pdf》上的C語言的例子,自己也寫了一個,但是在調(diào)用函數(shù)iap_entry (ISP_Command , ISP_Result);時,程序就會死掉,不知道為什么!

7樓: >>參與討論
hxj830088
請教FLASH用作EEPROM使用
我已經(jīng)知道了那三個函數(shù)體。謝謝!

8樓: >>參與討論
yuzhongren
RamToFLASH 這個函數(shù)怎么理解阿
我看到的書上都是 RamToFLASH(目標(biāo)地址, 源地址, 512);
這里為啥是RamToFLASH(目標(biāo)地址, 源數(shù)據(jù), 512);呢
還有3.    從FLASH中讀數(shù)據(jù)
FLASH中讀數(shù)據(jù)比較簡單,可以定義一個指針變量,該指針變量指向特定的FLASH地址,例如可以寫成下面的樣子:
uint32 i;
uint8 * p;
p=(uint8 *)0x1C000;
for(i=0;i<400;i++)
{
     Puthexbyte(*(p++));
}
這里的Puthexbyte(*(p++))函數(shù)我怎么找不到阿


9樓: >>參與討論
lipyxj
LPC2131 iap例程編譯出錯
2.IAP演示實驗例程怎么編譯不過?提示連接錯誤

testiap.axf: Error: L6241E: startup.o(vectors) cannot use the address of '~IW' function ResetInit as the image contains 'IW' functions.
testiap.axf: Error: L6241E: startup.o(vectors) cannot use the address of '~IW' function Undefined as the image contains 'IW' functions.
testiap.axf: Error: L6241E: startup.o(vectors) cannot use the address of '~IW' function SoftwareInterrupt as the image contains 'IW' functions.
testiap.axf: Error: L6241E: startup.o(vectors) cannot use the address of '~IW' function PrefetchAbort as the image contains 'IW' functions.
testiap.axf: Error: L6241E: startup.o(vectors) cannot use the address of '~IW' function DataAbort as the image contains 'IW' functions.
testiap.axf: Error: L6241E: startup.o(vectors) cannot use the address of '~IW' function FIQ_Handler as the image contains 'IW' functions.

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
easyarm2200自帶的演示程序為什么不運行?
提高中斷服務(wù)程序速度的辦法
請問:如何打開和編輯*.scf文件?
請大家?guī)兔匆幌逻@個小程序
我不明白這個函數(shù)有什么用
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 udpf.com.cn 浙ICP證030469號