帶RTC的I2C總線鐵電存儲器FM31256的設計

圖2 I2C總線通信基本格式
FM31256嚴格按I2C總線的時序和數據格式操作,其訪問操作過程可描述為如下步驟: 啟動—從機地址—應答—目標地址—應答—(啟動—從機地址—應答)—數據(單或多字節)—應答—停止(注: 從機地址中包含了讀寫命令;括號中的步驟為當前地址讀和連續地址讀命令所特有的)。這里對應答信號作些說明。應答脈沖發生在第8個數據位傳送之后。在這個狀態下,發送方須釋放SDA讓接收方驅動;當接收方發出低電平時,表示正常應答,當發出高電平時,表示無應答。不應答有兩種情況: 一是數據傳送出錯,無應答使發送方終止當前操作,以便重新尋址;二是接收方有意不作應答,以結束當前操作。
在對SFR操作時,首先發送的命令字節為“1 1 0 1 X A1 A0 R/W”,目標地址為單字節范圍(00H~18H)。FM31256的32 KB存儲單元地址為0000H~7FFFH,對其進行操作時,首先發送的命令字節為“1 0 1 0 X A1 A0 R/W”,目標地址長度為雙字節,即RAM區的尋址能力為0~65 535。FM31系列存儲器具有內部地址鎖存和自動累加功能,當對連續地址區進行讀/寫操作時,只須發送存儲區首地址。
3 FM31256在電磁鑄軋電源控制中的應用
將FM31256應用在電磁鑄軋電源控制裝置當中,實現主控系統的看門狗復位、給定參數、實時時鐘及故障記錄保存的功能。
作為一種解決微處理器因干擾而死機問題的有效方法,看門狗的作用是必不可少的。針對控制對象,需要對A、B、C三相控制裝置進行調節,包括設定正弦波的頻率和幅值、反饋系數、PID參數、過流延時、開放延時和關斷延時等;將這些給定的參數及時寫入鐵電存儲器FM31256的存儲單元中,使之掉電后仍能保存。當系統發生故障時,例如控制裝置中晶閘管周圍溫度超過額定溫度,裝置就會發出報警信號,并將發生故障的準確時間、實際溫度值記錄在FM31256的存儲單元中,以便系統查詢;同時,FM31256的事件計數器加1計數。同樣,利用串行標識區可鎖定的功能,可將電磁鑄軋電源控制裝置的序列號寫入其中,非常安全可靠。
3.1 硬件原理
電磁鑄軋電源控制裝置應用FM31256的硬件接口電路如圖3所示。從圖3中可以看出,系統以超低功耗MSP430系列芯片MSP430F149作為控制器;FM31256作為參數存儲單元,與處理器之間采用I2C總線進行通信。由于MSP430F149沒有I2C總線接口,所以任取2個I/O口模擬。實時時鐘在VDD掉電以后自動切換到后備電源VBAK。

圖3 FM31256與MSP430F149的硬件接口電路
32.768 kHz晶振等效于6 pF電容。若將SFR的01H單元對應的OSCEN位設為0,同時置00H單元的CAL位為1,使CAL引腳輸出512 Hz的脈沖信號,則可檢測晶振工作是否正常,因為512 Hz是晶振頻率的64分頻。制PCB板時須注意: X1和X2晶振引腳均為高阻引腳,兩引腳之間的距離須小于5 mm;即使信號位于板內層,也不允許信號線靠近X1和X2引腳。在晶振引腳周圍使用接地保護環,內部或板反面使用接地保護敷銅。
3.2 存儲區訪問程序設計
對FM31256存儲器訪問操作過程中,微處理器處于主機地位,器件始終處于從機地位。根據上述對FM31256的分析,可以把所有的通信過程歸納為3種類型: ① 單脈沖,如Start、Stop、Ack、Nack;② 字節發送,如從機地址、目標地址和數據傳送;③ 字節接收,如讀操作中的數據傳送。因此只要把這些操作以子程序的形式編寫好,所有的通信操作就可通過調用這些子程序來完成。這里以MSP430F149微處理器的嵌入式C語言編寫。設微處理器端口P6.6為數據線(SDA);P5.4為時鐘線(SCL)。
限于篇幅,本文不作詳細介紹,只給出模擬I2C總線及字節寫入、讀出的部分C語言程序:
#defineRTC_SDABIT6
#defineRTC_SCLBIT4
void FM31256_Start(void) {/*FM31256啟動程序*/
P6OUT |=RTC_SDA;// SDA=1
P5OUT |=RTC_SCL;// SCL=1
delay(IIC_DELAY);
P6OUT =~ RTC_SDA;// SDA=0
delay(IIC_DELAY);
P5OUT =~ RTC_SCL;// SCL=0}
void FM31256_Stop( void ) {/*FM31256停止程序*/
P6OUT =~ RTC_SDA;// SDA=0
delay(IIC_DELAY);
P5OUT |=RTC_SCL;// SCL=1
delay(IIC_DELAY);
P6OUT |=RTC_SDA;// SDA=1
delay(IIC_DELAY);}
void FM31256_Send_Ack( void ) {/*FM31256應答程序*/
P5OUT =~ RTC_SCL;// SCL=0
P6OUT =~ RTC_SDA;// SDA=0





評論