大容量閃爍存儲(chǔ)器AT45D081及其在稅控加油機(jī)中的應(yīng)用
關(guān)鍵詞:AT45D081;稅控加油機(jī);可靠性
在電子產(chǎn)品的設(shè)計(jì)中,經(jīng)常存在斷電后數(shù)據(jù)或機(jī)器參數(shù)的保存問(wèn)題。早期一般由電池為RAM供電,但由于環(huán)境及電池本身的原因,這種方式常使數(shù)據(jù)丟失。目前,小容量數(shù)據(jù)存儲(chǔ)多采用93系列EEPROM(如93C46)或24系列EEPROM(如24C45)。但如果要求存儲(chǔ)的數(shù)據(jù)量很大?這些芯片的存儲(chǔ)能力就不能勝任。為此,本文介紹一種大容量的閃爍存儲(chǔ)器芯片AT45D081,并給出其在稅控加油機(jī)中的應(yīng)用。
1 AT45D081簡(jiǎn)介
1.1 AT45D081的特點(diǎn)
AT45D081A是ATMEL公司生產(chǎn)的閃爍存儲(chǔ)器。它采用串行方式傳送數(shù)據(jù), 符合ISO7816標(biāo)準(zhǔn),時(shí)鐘頻率可高達(dá)15MHz, 并采用單5V電源供電。同時(shí)具有功耗低、體積小、容量大、傳送快速, 與CMOS和TTL電平兼容以及掉電后數(shù)據(jù)不丟失等特點(diǎn)。 由于讀寫(xiě)時(shí)序與SPI模式0與模式3兼容, 因此,其硬件設(shè)計(jì)與軟件編程都很容易。
1.2 內(nèi)部結(jié)構(gòu)與引腳說(shuō)明
AT45D081內(nèi)部由主存儲(chǔ)器陣列、兩個(gè)SRAM數(shù)據(jù)緩沖區(qū)BUFFER1、BUFFER2以及I/0接口組成。其中主存儲(chǔ)器陣列容量為8M Bits,由4096頁(yè)組成,每頁(yè)264字節(jié),為編程方便又把連續(xù)的8頁(yè)定義為一塊。每個(gè)SRAM數(shù)據(jù)緩沖區(qū)大小為264字節(jié)。 這兩個(gè)緩沖區(qū)可在主存儲(chǔ)器陣列訪問(wèn)某一緩沖區(qū)或某緩沖區(qū)訪問(wèn)主存儲(chǔ)器陣列時(shí),另外一個(gè)緩沖區(qū)能同時(shí)與外部交換數(shù)據(jù)。主存儲(chǔ)器與緩沖區(qū)的相互訪問(wèn)是在芯片內(nèi)部自動(dòng)完成的,且不需要外部的干涉,這樣就大大提高了外部訪問(wèn)的效率。但外部可以通過(guò)讀取芯片提供的只讀狀態(tài)存儲(chǔ)器的內(nèi)容知道芯片容量及工作狀態(tài)信息(可用就緒/忙標(biāo)志指示緩沖區(qū)是否與指定的主存儲(chǔ)器陣列頁(yè)內(nèi)容一致)。
AT45D081的主要引腳功能見(jiàn)表1所列。當(dāng)AT45D081的CS由高變低時(shí),芯片啟動(dòng)一次操作,而當(dāng)CS由低變高時(shí),終止操作。這時(shí)SI上的任何數(shù)據(jù)都被忽略,SO處于高阻態(tài)。 當(dāng)WP為低時(shí),主存儲(chǔ)器的前256頁(yè)不能被訪問(wèn)。如果要訪問(wèn)前256頁(yè),則必須使WP為高。WP已被芯片內(nèi)部拉高,如果要對(duì)前256頁(yè)編程,那么,WP應(yīng)在外部置高電平。
1.3 操作指令及讀寫(xiě)時(shí)序
外部訪問(wèn)主存儲(chǔ)器陣列和緩沖區(qū)及狀態(tài)寄存器是通過(guò)輸入命令來(lái)實(shí)現(xiàn)的。AT45D081共提供了26條命令?這些命令按功能可分為讀主存儲(chǔ)器陣列頁(yè)、主存儲(chǔ)器陣列頁(yè)內(nèi)容傳送到緩沖區(qū)、緩沖區(qū)內(nèi)容傳送到主存儲(chǔ)陣列頁(yè)、頁(yè)擦除、塊擦除、外部通過(guò)緩沖區(qū)對(duì)主存儲(chǔ)器頁(yè)寫(xiě)入、自動(dòng)頁(yè)重寫(xiě)?緩沖區(qū)讀寫(xiě)?狀態(tài)寄存器讀等。所有的命令都遵循下面的格式?首先是8位命令碼?然后是24位地址碼?有的命令后面還要輸入無(wú)關(guān)碼。輸入時(shí)高位在前?低位在后。輸入模式與SPI模式0與模式3兼容。表2所列是連續(xù)讀主存儲(chǔ)陣列、讀狀態(tài)寄存器和寫(xiě)緩沖區(qū)命令格式。表中:r代表該位為保留位,p表示該位為頁(yè)地址位,b表示該位為頁(yè)內(nèi)字節(jié)地址位,x表示該位可以為0也可以為1,N/A表示輸入數(shù)據(jù)流中沒(méi)有這些位,由表2可知:24位地址可分為5位保留位, 7位塊地址,10位頁(yè)地址和9位頁(yè)內(nèi)字節(jié)地址。對(duì)于主寄存器陣列,頁(yè)內(nèi)字節(jié)的訪問(wèn),如連續(xù)讀主寄存器陣列,必須指定頁(yè)及頁(yè)內(nèi)地址作為訪問(wèn)的首地址。同時(shí)還需注意,該命令24位地址后還有32位無(wú)關(guān)位輸入。而對(duì)于緩沖區(qū)的訪問(wèn)?因緩沖區(qū)的大小為264字節(jié),因此指定9位地址就可以了。此外,在塊的擦除方面,由于是整塊操作,所以,只需指定7位塊地址而無(wú)需指定其它地址。
圖2所示是連續(xù)讀主寄存器陣列的時(shí)序。從時(shí)序圖可看出,當(dāng)CS為高電平時(shí),SI輸入的位流無(wú)效,此時(shí),SO處于高阻態(tài)。當(dāng)CS由高到低時(shí),片選有效,此時(shí)將啟動(dòng)操作命令,在時(shí)鐘SCK的上升沿把SI上已備好的數(shù)據(jù)串行送入芯片(高位在前)。對(duì)于連續(xù)讀主存儲(chǔ)器陣列命令,其輸入命令格式位流為:
01101000 rrrrrppp pppppppb bbbbbbbb xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx ,共64位。當(dāng)?shù)冢叮祩€(gè)時(shí)鐘到來(lái)時(shí)?SO由高阻態(tài)變?yōu)橛行顟B(tài)而輸出數(shù)據(jù),數(shù)據(jù)輸出也是高位在前。
圖2
2 AT45D081在稅控加油機(jī)中的應(yīng)用
2.1 稅控加油機(jī)對(duì)存儲(chǔ)器的要求
稅控加油機(jī)是對(duì)車輛、油罐等設(shè)備進(jìn)行加油并進(jìn)行稅務(wù)管理的加油機(jī)器。為對(duì)加油過(guò)程進(jìn)行有效監(jiān)督管理,稅控加油機(jī)必須達(dá)到國(guó)家要求的加油精度,并應(yīng)顯示每次加油的油價(jià)、加油量及加油金額,同時(shí)稅控加油機(jī)也必須能夠存儲(chǔ)7年之內(nèi)每天的加油記錄,并提供查詢接口。
為了滿足稅控加油機(jī)對(duì)數(shù)據(jù)存儲(chǔ)的要求,存儲(chǔ)器必須提供足夠大的存儲(chǔ)空間,且在掉電時(shí)不能丟失數(shù)據(jù)。同時(shí)應(yīng)有較強(qiáng)的防數(shù)據(jù)誤寫(xiě)功能以保證存儲(chǔ)在存儲(chǔ)器中稅務(wù)數(shù)據(jù)的安全?;诙喾矫婵紤]?設(shè)計(jì)中選用了AT45D081。
2.2 稅控加油機(jī)的功能結(jié)構(gòu)
稅控加油機(jī)主要由稅控CPU、主控CPU以及其它一些外圍設(shè)備組成。稅控CPU和主控CPU之間是通過(guò)模擬的SPI總線來(lái)通信的。主控CPU通過(guò)SKH向稅控CPU請(qǐng)求通信,稅控CPU通過(guò)SKL作應(yīng)答。通信數(shù)據(jù)先由一方放到雙端口移位緩存中,然后通知對(duì)方到緩存中取數(shù)據(jù)。加油的工作過(guò)程如下,主控CPU檢測(cè)到提油槍信號(hào)后將向稅控CPU發(fā)出加油請(qǐng)求。如果稅控CPU允許加油,則一方面使能電機(jī)控制輸入端A,同時(shí)通知主控CPU,主控CPU接到通知后,立即使能電機(jī)控制端B,同時(shí)計(jì)算加油數(shù)據(jù)并通過(guò)SPI協(xié)議總線傳送到稅控CPU,再由稅控CPU驅(qū)動(dòng)顯示。當(dāng)主CPU檢測(cè)到油槍掛起后,它一方面送出關(guān)電機(jī)信號(hào),另一方面通知稅控CPU也送出關(guān)機(jī)信號(hào)。當(dāng)然,主控CPU也可以通過(guò)鍵盤(pán)向稅控CPU查詢時(shí)間及其它信息。
2.3 提高可靠性的設(shè)計(jì)措施
加油的數(shù)據(jù)由稅控CPU保存在AT45D081中。為提高芯片的抗干擾能力,防止程序?qū)π酒恼`寫(xiě),有效保護(hù)片內(nèi)數(shù)據(jù)。硬件設(shè)計(jì)中采取了一些保護(hù)措施。其原理如下:
設(shè)CS為Q0,RDY為Q1,CPU的復(fù)位信號(hào)RE-SET為C。AT45D081的復(fù)位信號(hào)RESET1為Y, 則Y=(Q1Q2)C。因此,當(dāng)CPU剛上電復(fù)位或由于主控CPU運(yùn)行出錯(cuò)(如程序跑飛)而使“看門(mén)狗”芯片MAX813輸出復(fù)位信號(hào)RESET產(chǎn)生熱復(fù)位時(shí),系統(tǒng)迫使AT45D081復(fù)位,同時(shí)禁止對(duì)該片的任何讀寫(xiě)操作。當(dāng)CPU處于正常工作時(shí),只有該片的片選信號(hào)有效,同時(shí)芯片處于就緒狀態(tài)時(shí),才允許對(duì)其進(jìn)行訪問(wèn),否則迫使芯片處于復(fù)位狀態(tài)并禁止訪問(wèn),這樣就防止了外界對(duì)其進(jìn)行誤寫(xiě),從而有效地保護(hù)了片內(nèi)數(shù)據(jù)。
圖3
2.4 AT45D081的讀寫(xiě)軟件編程
AT45D081有關(guān)引腳接線如圖3所示,下面給出針對(duì)寫(xiě)緩沖區(qū)和連續(xù)讀主存儲(chǔ)器陣列命令的51匯編語(yǔ)言軟件編程。
;向緩沖區(qū)1寫(xiě)入數(shù)據(jù)
writebuf:
clr CS
mov a,#84h
lcall Byte_shift_out ;送命令碼
clr a
lcall Byte_shift_out ;送8位任意碼
mov a,hi_(kāi)addr
lcall Byte_shift_out ;送高字節(jié)地址
mov a,lo_addr
lcall Byte_shift_out ;送低字節(jié)地址
writebuf0:
mov a,@r0
;連續(xù)讀主存儲(chǔ)器陣列內(nèi)容
Readmain:
clr CS
mov a,#68h
lcall Byte_shift_out ;送命令碼
clr c
mov a,lopageadd
rlc a
mov a,hi_(kāi)page_addradd;
;合成24位地址的9~18位
rlc a
lcall Byte_shift_out;送前8位
mov a,hi_(kāi)addr
rrc a
mov a,lopageadd
rlc a ;合成24位地址0~8位
lcall Byte_shift_out ;送第2個(gè)8位
mov a,lo_addr
lcall Byte_shift_out ;送0~7位
clr a
mov r3,#04H
readmain0:
lcall Byte_shift_out
djnz r3,readmain0 ;送32位無(wú)關(guān)位
readmain1:
lcall Byte_shift_in
mov @r0,a
inc r0 ;
;連續(xù)從指定的頁(yè)及頁(yè)內(nèi)地址讀出R2個(gè)數(shù)據(jù)
djnz r2,readmain1 ; 送命令碼
setb CS
ret
ReadState: ;讀狀態(tài)寄存器內(nèi)容
clr fmcs
MOV a,#57h;
lcall outcommon
lCALL incommon
setb fmcs
lcall Byte_shift_out; 連續(xù)從R0指定的地址寫(xiě)入R2個(gè)數(shù)據(jù)到BUFFER1
inc r0
djnz r2,writebuf0
setb CS
ret
3 結(jié)束語(yǔ)
本文設(shè)計(jì)的稅控加油機(jī)已通過(guò)國(guó)家稅控認(rèn)證及電磁兼容試驗(yàn)認(rèn)證。產(chǎn)品投產(chǎn)5年來(lái),運(yùn)行一直穩(wěn)定可靠,各項(xiàng)指標(biāo)均達(dá)到國(guó)家要求標(biāo)準(zhǔn)。尚未發(fā)現(xiàn)存儲(chǔ)在AT45D081中的數(shù)據(jù)出現(xiàn)丟失和異?,F(xiàn)象。
評(píng)論