摘 要: 一種基于單片機控制的數碼傳真機。介紹了系統各功能模塊的設計,并結合Windows FAT文件管理系統的磁盤管理思想,提出了一種基于閃存(FLASH芯片)的傳真文件存儲管理" title="存儲管理">存儲管理方案,有效解決了有限不揮發存儲器的最佳應用問題。
關鍵詞: 數碼傳真機 MODEM DSP Windows FAT 文件管理
傳統傳真機利用紙張作為媒質進行傳真文件的收發,給用戶使用帶來不便的同時,也造成了資源浪費。而數碼傳真機可以直接與電腦連接,利用數據存儲" title="數據存儲">數據存儲芯片作為存儲介質,節約了紙張等資源,并且數碼傳真機具有傳真質量高、傳輸速率快、使用方式靈活、節省通信費用等優點。因此,對于數碼傳真機的研究應用具有重要的實際應用價值。
本數碼傳真機系統以單片機作為系統總控單元,利用MODEM芯片(CX06833)實現調制、解調功能,利用閃存(FLASH芯片)作為傳真文件數據的存儲介質。同時,為減少系統占用空間和滿足控制信號轉換的時序要求,用CPLD(XC95288)實現系統外圍芯片的譯碼、讀寫控制。系統設計包括圖像掃描、編碼模塊,實現了與普通傳真機的兼容。本數碼傳真機系統實現功能有:(1)傳真文件的實時、定時發送;(2)傳真的自動應答、接收及傳真文件數據的掉電后保存;(3)DSP控制的圖像掃描、編碼功能;(4)語音解碼、播放功能。
本文介紹了數碼傳真機系統總體設計思想,較詳細地描述了系統各功能模塊的設計,主要包括主控單片機模塊及其與主機的交互協議、基于MODEM模塊的傳真通信流程、CPLD控制的譯碼邏輯電路、DSP控制的圖像掃描模塊,并提出了一種基于FLASH芯片的文件數據存儲方案" title="存儲方案">存儲方案,解決了傳真文件數據的不連續存儲及文件刪除后存儲空間的有效利用問題。
1 數碼傳真機系統總體設計
此數碼傳真機系統通過串口" title="串口">串口與PC機實現數據通信,在主控單片機的控制下,把傳真數據傳送到調制、解調模塊,再由MODEM芯片完成調制功能。接收傳真時,主控單片機首先把接收到的傳真數據寫入數據存儲芯片(FLASH),再按照規定協議上傳給主機。由DSP控制的圖像掃描模塊實現掃描及傳真編碼功能,掃描數據經過傳真編碼后存儲到FLASH芯片(2MB)中,再在主控單片機的控制下,完成圖像的傳真傳輸。各個功能模塊的讀寫、片選等邏輯控制由CPLD模塊實現。
系統設計采用模塊化設計思想,整個數碼傳真機系統可以劃分為:主控單片機模塊、調制解調及語音播放模塊、液晶顯示模塊、基于CPLD控制的譯碼邏輯模塊、基于DSP控制的圖像掃描模塊、電源及外圍電路模塊。系統的組成框圖如圖1所示。
2 主要功能模塊詳細設計描述
2.1 基于單片機總體控制模塊
單片機(AT89C51)作為數碼傳真機系統的總體控制單元,控制其他各功能模塊的工作。主要功能有:通過串口與PC機控制軟件進行通信;控制調制、解調模塊工作及傳真協議交互;讀取主機下載數據或圖像掃描編碼數據,并進行數據存儲;發送、接收傳真數據。由于系統中擴展模塊和外部擴展數據存儲器數量較多,選用CPLD實現各模塊的片選、讀寫邏輯控制。總體控制模塊設計如圖2所示。
2.1.1 傳真機與主控計算機的交互協議
傳真機與主控計算機通過串口(RS232)實現數據通信。交互協議的主要信息包括:計算機下載的功能信息(如開始發送傳真、終止傳真等功能)、主機下載的傳真數據、傳真機上傳給計算機的功能信息及傳真數據。交互協議中,采用命令頭、流水號、幀校驗和的傳輸方式。功能傳輸的格式規定為:
0x55+0xAA+pipenum+length+state+value1+value2+…+valuen+sumcheck
其中:0x55、0xAA是功能命令頭;pipenum是流水號;length是命令功能幀長度;state是功能號;value1~valuen是功能參數;sumcheck是幀校驗和。
數據傳輸格式規定為:0x66+0x99+ pipenum+length+data1+data2+…+datan+sumcheck
其中:0x66、0x99是數據命令頭;length是數據幀長度;data1~datan是數據;sumcheck同樣是數據幀校驗和。
主控計算機下載一份傳真數據到傳真機的程序流程如圖3所示。傳真機上傳一份傳真數據到主機的程序流程類似。
2.1.2 基于CPLD的片選、讀寫邏輯控制功能實現
數碼傳真機系統中,單片機要訪問的功能模塊較多,主要有:外部擴展RAM模塊、外部數據存儲空間FLASH模塊、MODEM調制解調模塊、DSP圖像掃描模塊。設計中,采用AT89C51的P1口作為外部擴展模塊的選擇信號,用CPLD譯碼,靈活實現各個不同模塊之間的片選、讀寫控制。
CPLD程序設計中,用VHDL語言實現控制功能模塊的程序設計,并用Modesim仿真驗證。此功能模塊的輸入端口有:AT89C51的地址、數據復用信號(P0、P2);AT89C51的模塊選擇控制信號(P1);地址鎖存信號(ALE);讀寫信號(WR、RD)。輸出端口主要有:外部FLASH的地址、數據信號及片選、讀寫信號;外部擴展RAM的片控制信號;MODEM芯片的數據、片選、讀寫信號;DSP模塊的地址、數據、片選讀寫信號。
2.2 MODEM芯片功能描述及傳真通信過程的建立
系統設計中,MODEM芯片采用CX06833,實現數字信號的調制、解調功能。CX06833采用TQFP-144封裝,片內集成微控制器、ROM(256KB)、RAM(32KB);可以通過串口或并口與主機相連(此系統中選擇為并口方式與主控單片機連接);可以與語音解碼芯片(CX20442)相連,實現語音播放功能。并且自動完成數字信號的調制解調功能,減少了主機的運算量。對CX06833的操作是通過對其片內寄存器的讀寫實現的。
數碼傳真機用T.30作為標準化的傳輸規程,采用二進碼信號方式。整個傳真通信過程包括五個階段:階段A-呼叫建立,包括撥號后被呼方應答,或檢到振鈴后應答呼方;階段B-報文前處理,包括標識部分和命令部分;階段C-報文傳輸;階段D-報文后過程;階段E-呼叫釋放。
2.3 基于DSP控制的圖像掃描模塊設計
圖像掃描模塊由DSP(TMS320VC5402)作為主控器件,芯片具體內部結構、管腳分布、工作時序等可參照TI公司提供的數據手冊。設計中,DSP的增強主機接口HPI8作為普通I/O口,控制掃描儀CIS及馬達控制電路部分工作。圖像掃描模塊設計為彩色和黑白兩種模式。首先,CIS(Contact Image Sensors)感應到的模擬信號通過ADC器件(彩色圖像選擇12位的AD器件WM8150;黑白圖像選擇二值比較電路)進行數字化,得到的數據通過多通道緩沖串口(MCBSP)發送給DSP。DSP工作設定為DMA方式,接收掃描圖像數據后,進行傳真編碼處理,存儲到數據緩沖芯片SRAM中,再由主控單片機實現傳真發送。掃描電路的時鐘、串口接收時鐘及幀同步信號均由CPLD提供。DSP的外圍配置包括:3片SRAM(選用CYPRESS公司的CY7C1041CV33)作為掃描數據緩沖;一片FLASH存儲器(選用AMD公司的AM49LV001)作為擴展程序存儲空間;JTAG接口。VC5402的Boot Loader模式為并口Boot模式。在此數碼傳真機系統中,VC5402實現的主要數據處理算法是改進的霍夫曼圖像傳真壓縮編碼。圖像掃描模塊結構如圖4所示。
3 基于閃存的傳真文件存儲方案設計
有效的傳真文件存儲管理方案是此數碼傳真機系統的關鍵技術之一。待發送的傳真和接收到的傳真首先進行存儲,然后在必要時(傳真發送完成或接收到的傳真上傳主機后)刪除,并釋放占用的存儲空間。對于數碼傳真機系統,文件的存儲和刪除的需要反復進行。硬件存儲資源有限,如果傳真文件存儲管理不善,可能造成存儲資源的巨大浪費,并可能影響數碼傳真機的正常工作。
本數碼傳真機系統中,采用非易失性存儲器件FLASH(2MB)作為數據存儲器件,結合Windows FAT文件系統中磁盤存儲管理思想,通過建立文件存儲管理鏈表" title="鏈表">鏈表,設計了適合傳真機需求的傳真文件管理存儲方案。FLASH芯片選用AMD公司的AMD29F016D,其存儲空間為2MB。2MB的存儲空間分成32段(0~31段),每段存儲空間64KB。FLASH芯片存儲空間的初始狀態是0xFF,每位的存儲內容只能從‘1’寫‘0’而不能相反,任何把數據從‘0’寫成‘1’的操作都會使芯片處于讀取狀態,并且它只能進行段擦除和整片擦除操作。要對某段存儲空間的數據進行修改,必須先進行整段的擦除操作,數據在緩沖區修改后,再整段寫入FLASH中。
3.1 傳真文件存儲管理區的建立
利用FLASH芯片作為傳真數據的存儲器件,需要建立合理的文件存儲管理結構。為實現數據的不連續存儲,并避免數據刪除后,存儲空間得不到有效利用造成資源浪費,結合Windows FAT文件管理中的索引式文件存儲結構,通過對存儲空間重新劃分,設立文件鏈表管理區,提出了基于FLASH芯片的文件存儲方案。
3.1.1 傳真文件信息區組織
此方案中,采用FLASH芯片的第00段作為傳真文件信息區,存儲收發傳真的容量、頁數、電話號碼、存儲空間等信息。根據傳真過程的實際需要,把傳真文件信息區分為接收傳真信息區、發送傳真信息區、文件存儲鏈表區和其他信息存儲區。其中接收傳真信息區和發送傳真信息區采用同樣的結構,主要存儲傳真頁數、傳真容量、存儲起始地址、存儲結束地址和來源(發送)電話號碼等信息。按這種結構,每份傳真占用空間20B左右。讀取文件內容時,首先把起始扇區地址讀入,查找文件存儲列表區,按照索引結構讀取文件內容。
3.1.2 傳真文件存儲鏈表區
此存儲管理方案中,把FLASH存儲空間進行再次劃分,組成更小的存儲單元——扇區。每次文件存儲都以扇區為最小存儲單位,并采用鏈表結構實現一個完整文件的存儲。傳真文件存儲鏈表區是此方案的核心。
在數碼傳真機工作過程中,文件數據首先存儲到FLASH芯片中,如果待寫入的存儲空間中已有數據,則寫入操作失敗;如果文件刪除后的存儲空間沒有回收,則會造成存儲資源的浪費。首先,把每段64KB的存儲空間劃分為256個扇區((0x00~0xFF號扇區),每個扇區256個字節,作為最小的存儲單元,這樣每個扇區的物理地址為:SA(段號)+PAGE(扇區號),并用一個字節表明此扇區所存儲字節數。在此基礎上,建立文件存儲鏈表區。由于SA(段號)不可能是0xFF,所以用鏈表中每個單元的首字節內容指示此扇區的狀態:0xFF表示此扇區空閑,可以存儲數據;非0xFF表示此扇區已用。在文件數據寫入或刪除此扇區后,相應指示狀態也要修改。
根據傳真過程的實際需要,要求明確知道傳真數據一頁結束和總傳真結束的位置,在鏈表的每個單元中再增加一個字節表示此信息。文件存儲鏈表中每個指示單元的存儲結構如表1所示。
表1中:SA是段號(取值范圍:1~31),PAGE是扇區號(取值范圍:0x00~0xFF),NUM是此扇區占用字節數(取值范圍:0x01~0xFF),STATE是此扇區的狀態(0x00:整份傳真結束;0x01:一頁傳真結束;0xFF:不是結束標志)。
每個扇區的存儲空間為256B。通常每份傳真的容量都較大,需要多個扇區存儲,所以用文件鏈表結構實現一份傳真數據的完整存儲。根據每個指示單元的存儲結構,利用其首字節內容表示此扇區的存儲狀態。這樣存儲一份完整文件所建立的文件存儲鏈表如圖5所示。
3.2 傳真文件存儲及刪除流程
要實現傳真文件數據在FLASH芯片中的存儲,首先要搜索空閑扇區位置,接收數據緩存(≤256B),再對FLASH進行寫操作,把緩沖區數據寫入FLASH;寫滿一個扇區后,搜索下一空閑扇區并修改文件存儲鏈表內容。如此反復直至傳真結束,設置結束標志位。采用這種存儲方式,可以實現文件數據的不連續存儲。
在數碼傳真機工作過程中,傳真文件數據要反復進行刪除操作,如在傳真發送完成,或在上傳接收傳真后。文件刪除完成后,釋放占用的存儲空間,以便作收發傳真存儲之用。否則,可能造成存儲空間的浪費。在本存儲方案中,由于文件存儲采用頭信息和鏈表存儲的結構,文件的刪除操作也相應地進行傳真數據刪除和頭信息區內容修改。FLASH芯片只能進行段擦除和整片擦除,在同一段中,有的數據可能要保留,有的數據要刪除,所以在數據刪除和頭信息區修改過程中,利用外部擴展RAM作為數據緩存,并用256個字節作為存儲扇區空間內容是否保留的標志,規定0xFF代表數據保留、0x00代表數據不保留。采用這種存儲方案,當傳真文件刪除后,存儲空間可以再次回收利用,避免了存儲空間的浪費。系統設計中,通過編程實現并驗證了此存儲方案的有效性。一份傳真完整的存儲、刪除流程如圖6所示。
本數碼傳真機設計思想和實現方案對其他需要數據存儲的應用場合具有參考價值。
參考文獻
1 周子耀.傳真機原理與應用[M].北京:中國鐵道出版社,1992
2 張勇.C/C++語言硬件程序設計[M].西安:西安電子科技大學出版社,2003
3 林國鈞.傳真機常見故障分析與排除[M].北京:機械工業出版社,2002
4 Willian.S.Dorvis著,陳向群譯.操作系統基礎教程[M].北京:電子工業出版社,2003
5 AMD29F016D datasheet.AMD Cro.1999
6 TMS320VC5402 datasheet.TI Cro.2000
7 CC06833-3X/4X datasheet.2000
8 VHDL Referenc Manual.Xilinx Cro.1997
9 李朝青.單片機原理與接口技術[M].北京:北京航空航天大學出版社,2003