1 概述 行駛記錄儀的主要數據包括事故疑點和行駛狀態數據。其中,事故疑點數據是記錄儀以不大于0.2s的時間間隔持續記錄并存儲停車前20 s實時時間所對應的車輛行駛速度及車輛制動狀態信號,記錄次數至少為1O次:行駛狀態數據是無論車輛在行駛狀態還是停止狀態,記錄儀提供的與實時時間對應的車輛行駛速度信息。記錄儀應能以不大于1 min的時間間隔持續記錄并存儲車輛在最近360 h內的行駛狀態數據,該行駛狀態數據主要是車輛在行駛過程中與實時時間相對應的每分鐘間隔內的平均行駛速度值。 該記錄儀需要采用大容量的數據存儲器。以往的設計均采用并行存儲器或鐵電存儲器。其中并行存儲器存儲容量大,讀寫速度快。但是抗干擾能力差,而汽車上的干擾較強.雖然可以通過其它軟、硬件措施來避免。但是在設計時一般都需要選擇抗干擾能力強的芯片;鐵電存儲器采用串行接口,抗干擾能力強,也具有很高的靈活性,可以單字節讀寫(不需要擦除,可直接改寫數據),但其存儲密度小,單位成本高,讀寫速度較慢,由于行駛記錄儀要求每0.2 s采樣一次速度和狀態,因此讀寫存儲器的速度會影響采樣的精度和程序的運行。 現在的EEPROM閃速存儲陣列Flash Memory有ATMEL、SST的小扇區結構閃速存儲器(Small Sector Flash Memory)和ATMEL的海量存儲器(Data-Flash Memory)。這類器件具有EEPROM與NOR技術Flash Memory的綜合優勢,主要表現為: (1)讀寫靈活性比EEPROM差,不能直接改寫數據。在編程之前需先進行頁擦除,與NOR技術Flash Memory的塊結構相比,其頁尺寸小,因而具有快速隨機讀取和快編程、快擦除的特點: (2)與EEPROM相比,這種存儲器具有明顯的成本優勢; (3)存儲密度比EEPROM大,但比NOR技術Flash Memory小。 因此,該Dataflash存儲容量大,讀寫速度快,抗干擾能力強,在行駛記錄儀中作存儲器是較好的選擇。本文給出了采用ATMEL的AT45DB161B來存儲數據的記錄儀設計方案。 2 AT45DB161B串行存儲器 ATMEL公司的Data-Flash產品的代表型號為AT45DBxxxx。此系列存儲器容量較大(從1~256MB);封裝尺寸小,最小封裝型式(CBGA)的尺寸為6 mm×8 mm:可采用SPI接口進行讀寫;硬件連線少;內部頁面尺寸較小,8 MB容量的頁面尺寸為264字節,16 MB和32 MB容量的頁面尺寸為512字節,64 MB容量的頁面尺寸為1056字節,128 MB容量和256 MB容量的頁面尺寸為2112字節。另外,AT45DBxxxx系列存儲器內部有兩個與主存頁面大小相同的SRAM緩存,可提高系統的靈活性,簡化數據的讀寫過程。AT45DBxxxx系列存儲器的工作電壓只需2.7~3.6 V;整個芯片的功耗也較;典型讀取電流為4 mA,待機電流僅為2 μA:讀寫的速度最大為20 Mbps。 AT45DB161B的容量為16 MB。分成4096頁,每頁有528個字節。另外還有兩個528字節的數據緩沖器SRAM。在對主存儲器進行操作時,這兩個SRAM也可以接收數據。因此,和串行EEP-ROM相比。該器件可大大縮短讀寫時間。而采用SPI總線接口和并行的flash相比.其速度并不慢,而且抗干擾能力也比較強。 2.1 AT45DB161B引腳接口定義 表1所列是AT45DB161B的部分接口引腳定義。其中CS為片選信號,RESET為復位端,SCK、SI、SO為SPI總線,RDY/BUSY為忙信號,WP為前256頁的寫保護。 SPI接口是一種通用串行接口總線,利用SCK、SI和SO三根線可進行數據的讀/寫控制。數據以字節(8 bit)為單位。其中,SCK為時鐘信號,SI和SO為數據輸人和輸出線。 AT45DB161B僅支持SPI模式0和3。在這兩種模式下。SCK信號的上升沿觸發數據輸入,下降沿觸發數據輸出,二者的區別是SCK的起始電平不同。AT45DB161B復位時,默認為SPI模式3。 2.2 指令 除了存儲單元外,AT45DB161B內部還包括命令用戶接口CUI(Command User Interface)和狀態機。CUI接收用戶的軟件指令,以將其翻譯成狀態機內部操作碼并進行命令的有效性檢驗。狀態機則可控制存儲器所有的內部操作。器件內部包含一個8位的狀態寄存器,可用來指示設備的操作狀態。向存儲器輸入讀狀態寄存器命令可將狀態寄存器的數據讀出。下面簡單介紹模式SPI0和模式SPI3的讀寫存儲單元和狀態寄存器指令。 (1)讀狀態寄存器 發送命令字0XD7?梢灾苯拥玫綘顟B字(一個字節),其格式如下: 其中RDY/BUSY為1時表示不忙,可以接收下一條指令;為0則表示忙。 設計時可通過讀狀態寄存器或SO端口來判斷前一條指令是否讀寫完畢。當存儲器不忙時,SO端口從O變到1。此外,RDY/BUSY端口也可以用來判斷前一條指令是否讀寫完畢。 COMP用來指示主存儲單元數據和緩沖器中數據的比較結果:COMP為0表示相等。COMP為1表示不同。 Bit5一Bit2可表示存儲器的容量大小。 (2)讀存儲器指令 讀存儲器的數據有兩種方式,具體如圖1所示。其中一種是直接讀存儲器任意地址的數據,這可用指令D2H加3個字節的Dataflash地址再加上四個字節的空數據來實現,以SPI模式3為例,其工作時序如圖2所示。 另一種是通過緩沖器1(2)來讀存儲器上某一頁的數據。該方式可分兩個步驟:一是將數據讀到數據緩沖器1(2),即指令53H(55H)+3個字節的Dataflash中的頁地址(在任意SCK的模式下);二是讀數據緩沖器1(2),這可用指令D4H(D6H)+3個字節地址(主要表示從數據緩沖器的哪個地址開始讀)+1個字節空數據來實現。以SPI模式3為例的讀數據緩沖器時序如圖3所示。 (3)向存儲器寫數據 寫存儲器也有兩種模式,具體如圖4所示。其中一種是通過緩沖器1(2)直接寫到存儲器中;另一種是先寫到緩沖器,再將緩沖器的數據寫到存儲器中。具體的命令過程如圖5所示。 上述幾個命令的格式都是一個字節的命令+3個字節的地址。 3 W77E58和AT45DB161B的接口電路 W77E58是華邦電子公司(WinBond)推出的高速增強型:MCS-51系列單片機。使用W77E58的系統速度要比傳統51系列單片機快2.5倍。工作頻率為40 MHz的W77E58相當于100 MHz的8051,加上其內置32 KB可重復編程的Flash EPROM和1KB用MOV指令訪問的內部SRAM(節省了16條數據/地址I/O口線),以及2個增強型全雙工串行口和較低的價格,W77E58無疑是一款高性能、多功能、的高集成度8位微控制器,非常適合高速、雙串口、外圍簡捷、低成本系統。其抗干擾性能和加密性能相對也是比較好的。 采用W77E58和AT45DB161B進行接口的汽車行駛記錄儀的電路連接如圖6所示。 4 軟件實現 由于W77E58沒有SPI總線,因而需要用軟件來實現,下面給出SPI總線模擬程序和對AT45DB161B的讀寫程序。 該軟件采用Keil C編程,其源程序代碼如下: 4.1 SPI總線的模擬 (1)從SPI上讀一個字節 4.2 對AT45DB161B的讀寫 (2)寫Datanash中的數據 下面的程序采用先寫到緩沖器,再將緩沖器的數據寫到存儲器中的方式存儲數據: |