摘 要: 為了降低設備成本并保證數據存儲的穩定性,選取并正確使用合適的存儲器十分重要。分析了串行E2PROM在設備中使用的方法以及注意事項,并結合實際設計要求,著重從軟件方面提出了使用此存儲器的措施和方案。通過實踐驗證其電路結構簡單明了,成本較低,穩定性非常好,非常適合機電設備存儲大量數據。
關鍵詞:串行E2PROM;連續讀寫;可編程/擦除100萬次;性能穩定
串行E2PROM是可在線電擦除和電寫入的存儲器,具有體積小、接口簡單、數據保存可靠、可在線改寫、功耗低等特點,而且為低電壓寫入,在單片機系統中應用十分普遍。
Catalyst公司的串行E2PROM兼容工業上最受歡迎的三種總線——I2C總線、Microwire總線及SPI總線。Catalyst公司的產品提供1 KB~256 KB的高密度存儲,以及1.8 V~6 V的寬電壓操作范圍。本文以CAT24WC64為例著重介紹串行E2PROM。CAT24WC64是一個64 KB串行CMOS E2PROM,內部含有8 192 B(每字節為8 bit)。CATALYST公司的先進CMOS技術實質上減少了器件的功耗,CAT24WC64有一個32 B頁寫緩沖器,該器件通過I2C總線接口進行操作。
1 E2PROM存儲原理
E2PROM的電路結構經歷了一個發展過程,目前大多采用FLOTOX(Floating Tunnel Oxide)結構。這種結構的基本存儲單元的主體是一個特殊的MOS管,如圖1所示。它的特點是:浮置柵向下凸出一塊,使得浮置柵與漏區之間的隧道氧化層面積很小、厚度很薄。它的編程原理與EPROM相似,即讓浮置柵上帶電荷。具體實現是在控制柵加高電位,此時漏端的電子將借助Fowler-Nordheim隧道效應穿過薄氧化層而進入浮置柵。它的擦除原理與EPROM不同,是在控制柵加低電位,使存儲在浮置柵中的電子被抽出,于是又恢復到初始狀態。
2 系統硬件結構
系統的硬件部分主要包括前段信號采集放大電路和人機交互界面電路兩部分,系統硬件結構[1] 框圖如圖2所示。
系統硬件結構包括主控制器SST89E516RD2、 CAT24WC64存儲器、電源電路、溫度傳感器、壓力傳感器以及采樣放大電路。主控制器SST89E516RD2是一款來自SST公司的8位低功耗處理器,比常規8位處理器多了一個P4口,更有利于擴展,片內有64 KB的Flash和1 KB的RAM,性能更加出色。CAT24WC64存儲器采用I2C串行方式存儲,節省了CPU資源,而且數據在傳輸中不易受外界干擾。前段信號采樣采用熱電偶和壓力傳感器來完成。此外,對于熱電偶測得的微弱電流信號需通過運算放大器實現信號的放大和抬升。而人機交互(即顯示和鍵盤操作)通過簡單的電路得以實現。
CAT24WC64是Catalyst公司的一款支持I2C等多種協議的串行存儲器,具有體積小、接口簡單、數據保存可靠、可在線改寫、功耗低等特點,而且為低電壓寫入,在單片機系統中應用十分普遍;相比Atmel等公司的串行存儲器性價比更加突出;使用靈活性強,大大降低了系統開發的難度,而且降低了系統設計的成本。CAT24WC64外圍接口電路圖3所示。
3 系統軟件設計
3.1 系統總體設計
系統軟件部分的設計主要按功能塊劃分為若干個模塊進行編寫設計,主體循環就是對各個功能函數進行調用,完成系統的數據采集、處理以及大量客戶使用數據的存儲調用。整個軟件的編寫使用靈活性強、可讀性和可移植性強的C語言[3],在Keil C51集成開發環境下完成開發和最終調試。
主要的函數包括主函數、溫度測量、壓力測量、用戶數據存儲、鍵盤顯示等功能函數模塊。溫度測量功能塊實現對S型熱電偶測溫電路的模/數轉換以及線性化[4]和放大功能;壓力測量功能塊負責壓力信號的轉換;用戶數據存儲功能模塊主要是通過對I2C串行存儲器CAT24WC64的控制函數和協議棧的調用來完成數據的串行存儲。各個子函數之間保持各自獨立的完整性,能在主函數中實現無縫調用。
3.2 I2C串行存儲器CAT24WC64軟件設計[5]
CAT24WC64操作包括啟動、停止、隨機字節讀寫、連續讀寫、應答信號、校驗、延時等。下面重點說明連續讀寫以及包含的頁寫代碼的實現。
連續寫函數:
bit ISendStr(unsigned char sla,unsigned int add,unsigned char *s,unsigned char no)
{
unsigned char i,ch;
i2c_start(); // Send I2C Start Transfer
i2c_write(sla); // Send identifier I2C address-Write
WaitAck();
ch=add/256;
i2c_write(ch); // Send identifier I2C son address-Write
WaitAck();
ch=add%256;
i2c_write(ch); // Send identifier I2C son address-Write
WaitAck();
for(i=0;i<no;i++)
{
i2c_write(*s); // Send data to memory
s++;
if(i!=no-1)SendAck();
}
SendNotAck();
i2c_stop();
return(1);
}
因為i2c存儲器一般都是按頁存儲的,所以在寫的時候也要按照此規定進行操作,如若跨頁寫則會出現錯誤。在此采用了循環寫入的方法避免了跨頁寫容易出錯的問題。例如CAT24WC64存儲是按照32 B為一頁,下面給出具體的實現函數可以不受頁寫限制:
add=NUM-Guhua;
add=add*48;
add+=8;
for(i=0;i<24;i++)
{
DelayXms(5);
mm[0]=cs[i]/256;mm[1]=cs[i]%256;
ISendStr(at24C02,add+2*i,&mm[0],2);
DelayXms(5);
}
此函數避免了在連續寫入遇到跨頁時的限制,可以實現無縫連續寫入。
連續讀函數:
bit IRcvStr(unsigned char sla,unsigned int add,unsigned char *s,unsigned char no)
{
unsigned char i,ch;
i2c_start(); // Send I2C Start Transfer
i2c_write(sla); // Send identifier I2C address-Write
WaitAck();
ch=add/256;
i2c_write(ch); //Send identifier I2C son address-Write
WaitAck();
ch=add%256;
i2c_write(ch); //Send identifier I2C son address-Write
WaitAck();
i2c_start(); // Send I2C Start Transfer
i2c_write(sla+1); // Send identifier I2C address-Read
WaitAck();
for(i=0;i<no;i++)
{
*s=i2c_read(); // Read the memory number
s++;
if(i!=no-1)SendAck();
}
SendNotAck();
i2c_stop(); // Send I2C Stop Transfer
return(1);
}
連續讀函數的具體實現原理與連續寫入函數一樣,也實現了無縫連續讀出函數。
4 系統實驗結果和結論
本系統測試包括軟件測試、硬件測試、穩定性和存儲速度測試。通過溫度傳感器和壓力傳感器實現了信號采集并進行分析利用;通過相應的軟件校正消除了非線性誤差,在一定范圍內提升到比較高的測量精度,滿足了設計要求。選用了廉價可靠、性能出色的I2C存儲器CAT24WC64,可滿足使用者設計多種應用程序;對牙科市場多種瓷粉材料的燒結工藝參數進行存儲并加以應用,大大方便了使用者的操作。
參考文獻
[1] 何立民.單片機應用系統設計[M].北京:北京航空航天大學出版社,1989.
[2] 張載鴻.微型機(PC系列)接口控制教程[M].北京:清華大學出版社,1992.
[3] 徐愛鈞,彭秀華.單片機高級語言C51Windows環境編程與應用[M].北京:電子工業出版社, 2001.
[4] 王士杰.一種適用于微機型溫度儀表的熱電偶非線性校正[J]. 自動化儀表,1994(1):36-37.
[5] 范風強,蘭嬋麗.單片機語言C51應用實戰集錦[M].北京:電子工業出版社,2002.