摘要:為避免在程序運(yùn)行時(shí)向單片機(jī)內(nèi)置的Flash寫(xiě)入數(shù)據(jù)導(dǎo)致復(fù)位,采用調(diào)用鎖定與關(guān)鍵碼的操作方法對(duì)C2805lF35X型單片機(jī)的Flash進(jìn)行擦除、寫(xiě)入和讀取操作,并提供程序范例。該方法無(wú)需任何接口電路,使用方便,成本低且安全可靠。此方法已應(yīng)用于包裝機(jī)控制器,實(shí)現(xiàn)包裝參數(shù)的保存和修改,效果良好。
關(guān)鍵詞:C805lF35X;Flash;單片機(jī);包裝機(jī)
C805lF35X是Cygnal公司推出的混合信號(hào)片上系統(tǒng)型單片機(jī)MCU,采用CIP-5l內(nèi)核可大大提升指令運(yùn)行速度,另外該器件內(nèi)部還具有一個(gè)完整而先進(jìn)的時(shí)鐘系統(tǒng)和片內(nèi)調(diào)試電路,其內(nèi)置的Flash代替ROM和EPROM,不僅為用戶的存儲(chǔ)提供方便,還大大簡(jiǎn)化電路。這里給出使用C80-5lF35X單片機(jī)內(nèi)部Flash存儲(chǔ)器的擦除、寫(xiě)入和讀取操作方法。
1 存儲(chǔ)器結(jié)構(gòu)
C805lF35X單片機(jī)內(nèi)部含有2個(gè)獨(dú)立的存儲(chǔ)器:程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器。程序存儲(chǔ)器中包含8 KB可在系統(tǒng)編程的Flash存儲(chǔ)器。C8051-F35X通過(guò)設(shè)置程序存儲(chǔ)寫(xiě)允許位(PSCTL.0)采用MOVX指令對(duì)程序存儲(chǔ)器寫(xiě)入。如圖l所示。
這8 KB的Flash存儲(chǔ)器在一個(gè)連續(xù)的存儲(chǔ)器塊內(nèi)(地址范圍為OX0000~OXlDFF,OXlE00以上的地址保留),其通過(guò)硬件接口或采用MOVX指令對(duì)Flash存儲(chǔ)器在系統(tǒng)編程。
為了保證操作正確,寫(xiě)入和擦除操作由硬件自動(dòng)定時(shí),無(wú)需數(shù)據(jù)查詢(xún)判斷寫(xiě)/擦除操作何時(shí)結(jié)束。程序在Flash寫(xiě)入/擦除操作時(shí)停止執(zhí)行。
2 Flash存儲(chǔ)器的鎖定與解鎖
在Flash操作之前,必須按順序向Flash鎖定和關(guān)鍵碼寄存器(FLKEY)寫(xiě)入正確的關(guān)鍵碼,該關(guān)鍵碼禁止對(duì)知識(shí)產(chǎn)權(quán)信息(以程序或常數(shù)形式存儲(chǔ)在Flash中)進(jìn)行未經(jīng)授權(quán)訪問(wèn)或防止用戶無(wú)意修改程序代碼以及因系統(tǒng)條件異常導(dǎo)致代碼改變。寫(xiě)關(guān)鍵碼時(shí)必須按順序?qū)懀駝tFlash寫(xiě)入或擦除操作被禁止,直到下一次系統(tǒng)復(fù)位。存儲(chǔ)在Flash用戶空間的最后一個(gè)字節(jié)的安全鎖定字節(jié)保護(hù)Flash存儲(chǔ)器,使其不被非保護(hù)代碼或通過(guò)硬件接口讀寫(xiě)或擦除。使用安全鎖定字節(jié)時(shí)有以下關(guān)鍵點(diǎn):1)將Flash安全字節(jié)中的位設(shè)置為0,保護(hù)Flash存儲(chǔ)器不通過(guò)JTAG接口被訪問(wèn);2)采用軟件設(shè)置一個(gè)軟件讀訪問(wèn)限制,保護(hù)存儲(chǔ)器不被讀。3)已被軟件訪問(wèn)保護(hù)的Flash存儲(chǔ)器也應(yīng)用Flash安全字節(jié)進(jìn)行保護(hù)。使其不通過(guò)JTAG接口訪問(wèn);4)在保護(hù)Flash時(shí),包含F(xiàn)lash安全字節(jié)的Flash頁(yè)也應(yīng)保護(hù);5)如果最終用戶無(wú)需訪問(wèn)Flash,可通過(guò)簡(jiǎn)單鎖定整個(gè)Flash存儲(chǔ)器保護(hù)其不通過(guò)JTAG訪問(wèn)。
3 Flash數(shù)據(jù)擦除
采用軟件MOVX指令對(duì)Flash存儲(chǔ)器編程,在使用MOVX指令前,先允許Flash寫(xiě)操作,其過(guò)程為:1)將程序存儲(chǔ)寫(xiě)允許位PSWE(PSCTL.0)設(shè)置為邏輯“1”,這將使MOVX操作指向目標(biāo)Flash存儲(chǔ)器;2)按順序向Flash鎖定寄存器(FLKEY)寫(xiě)入Flash關(guān)鍵碼,PSWE位將保持置位狀態(tài),直到被軟件清除。
在采用軟件修改Flash內(nèi)容前,PSWE必須置為邏輯“l”;而在軟件擦除Flash存儲(chǔ)器前,PSWE位和PSEE位都必須置為邏輯“1”。寫(xiě)入Flash存儲(chǔ)器操作可清除數(shù)據(jù)位,但不能使數(shù)據(jù)位置“1”,只有擦除操作能將Flash中的數(shù)據(jù)位置為“l”。所以在寫(xiě)入新值前,必須先擦除待編程地址。Flash存儲(chǔ)器是以512字節(jié)的扇區(qū)為單位構(gòu)成的,一次擦除操作將擦除整個(gè)扇區(qū)(將扇區(qū)內(nèi)的所有字節(jié)置為OXFF)。
擦除一個(gè)扇區(qū)的步驟如下:1)禁止中斷;2)置“l”程序存儲(chǔ)器擦除允許位(PSCTL中的PSEE),以允許Flash扇區(qū)移除:3)置“1”程序存儲(chǔ)器寫(xiě)允許位(PSCTL中的PSWE),允許Flash寫(xiě)入;4)向FLKEY寫(xiě)第1個(gè)關(guān)鍵碼:0XA5;5)向FLKEY寫(xiě)第2個(gè)關(guān)鍵碼:0XFl;6)用MOVx指令向待擦除頁(yè)內(nèi)的任何一個(gè)地址寫(xiě)入1個(gè)數(shù)據(jù)字節(jié);7)清除PSWE和PSEE位;8)重新允許中斷。
作者:陳富安 張 瑩 河南工業(yè)大學(xué) 來(lái)源:電子設(shè)計(jì)工程