xmodem源碼
A. linux minicom需要安裝的庫怎麼安裝
1. minicom需要ncurses庫的支持,否則安裝會有問題。
A. 下載ncurses。我選擇是ncurses-5.6.tar.gz
下載地址:directory.fsf.org/project/ncurses/
B. 解壓縮到/opt/ncurses目錄下。# tar zxvf ncurses-5.5.tar.gz –C /opt/ncurses
C. 到ncurses目錄下,配置編譯ncurses。
源碼安裝的三個步驟(configure、make、make install)
2. 編譯安裝minicom
A. 下載地址(minicom-2.7.tar.gz)
alioth.debian.org/projects/minicom/
B. 解壓到/opt/minicom目錄下。tar zxvf minicom-2.1.tar.gz –C /opt/minicom/
C. 到minicom-2.7目錄下,配置編譯minicom。
在make階段會出現錯誤,具體解決方法見注1。
3. Minicom的配置和使用
命令minicom是進入串口超級終端畫面,而minicom -s為配置minicom。
打開終端輸入minicom後,初始化進入minicom的歡迎界面,這里提示按"Ctrl+A",再按"Z"鍵進入主配置目錄 按下"O"鍵,並選擇串口配置選項進行配置。接下來的配置是一樣的。解析一下minicom命令摘要,命令將被執行當你按下Ctrl+D ,Key是對應的"字母"鍵。
「D」鍵:撥號目錄
「S」鍵:發送文件,上傳文件有幾種方式:zmodem、ymodem、xmodem、kermit、ascii
「P」鍵:通信參數。對波特率進行設置。
「L」鍵:捕捉開關。
「F」鍵:發送中斷。
「T」鍵:終端設置。
「W」鍵:換行開關
「G」鍵:運行腳本
「R」鍵:接收文件
「A」鍵:添加一個換行符
「H」鍵:掛斷
「M」鍵:初始化數據機
「K」鍵:運行kermit進行刷屏
「E」鍵:切換本地回顯開關
「C」鍵:清除屏幕
「O」鍵:配置minicom
「J」鍵:暫停minicom
「X」鍵:退出和復位
「Q」鍵:退出沒有復位
「I」鍵:游標模式
「Z」鍵:幫助屏幕
「B」鍵:滾動返回
注1:minicom編譯安裝錯誤解決方法.
1. 在window.c中修改 static const char *CR, *NL;
為: static const char *BC,*CR, *NL;
2. 在src下面的Makefile中添加ncurses庫的名稱。
即:LIB = /opt/ncurses/lib/libncurses.a
注2:
A PC使用的USB轉串口,虛擬機的設置要添加「USB控制器」。
需要查看/dev目錄下是否存在ttyUSB0文件,如果沒有,手動創建一個
# mknod /dev/ttyUSB0 c 188 0
默認情況下,linux已經安裝了USB轉串口的驅動(PL2303)
# lsmod | grep usbserial
如果有usbserial, 則系統支持USB轉串口
B. PC使用串口。Serial Device要配置為/dev/ttyS0。
虛擬機的設置參見下面鏈接的「Minicom串列埠的設置」
B. 各位高手,請問xmodem/ymodem/zmodem有什麼區別
:XMODEM協議的控制字元
上表中各個縮寫也是標准ASCII碼的一個字元,在XMODEM協議中需要使用這些字元來表達協議的狀態。而其基本含義如表中所述。
2.2 數據幀格式與文件分解
XMODEM協議每次傳送的數據幀長度為132位元組,其中文件數據佔128位元組,其他4個位元組分別為開始標志,塊序號,塊序號的補碼和校驗位元組。其中開始標志,塊序號,塊序號的補碼位於數據塊開始, 校驗位元組位於數據塊結尾,如:
偏移 位元組數 名稱 描述 說明
名稱 數值(HEX)
0 1 SOH 01 起始位元組標志
1 1 Seq 1~FFh 塊序號
2 1 cmpl FFH-seq 塊序號的補碼
3 128 data ? 文件內容數據
131 1 csum ? 垂直累加和校驗 1:XMODEM協議允許使用2種校驗碼。2:校驗碼只從128位元組的數據進行計算後得出,頭部3個位元組不參加校驗和運算。
2 CRC ? 16位循環冗餘校驗
圖表 3:XMODEM協議的數據幀格式
如果文件長度不是128位元組的整數倍,最後一個數據塊的有效內容必然小於幀長,剩下部分需要用其他數據來填充,XMODEM建議使用「CTRL-Z」(=26(01aH)),這種情況下,接收方如何區別該幀中屬於文件的內容和填充的內容呢?
如果傳送的文件是只包含字母、數字和可顯示符號的文本文件(例如C程序源代碼文件),那麼根據內容本身接收方是可以區分的(「26」不是字母或者數字的ASCII碼),如果傳送的是任意數值的二進制文件(如程序目標碼),則接收方是無法區分文件內容和填充內容。
重要提示:XMODEM協議不能保證接收方接收的文件長度和發送方完全一致,接收方所接收的文件數據長度總是128位元組的整數倍,比發送文件的實際長度要大1到127位元組。多出的內容位於文件結尾處。
XMODEM協議的這種缺點對於用於嵌入式系統的程序代碼下裝沒有實際影響,處理器不會將填充內容當作代碼執行,只要程序存儲器的容量足夠,能存儲接收的所有數據就可以了。如果將XMODEM協議用於資料庫下裝,應當考慮多餘內容的影響,一般標准資料庫文件中均有表示資料庫尺寸、欄位數、記錄數等資料庫結構參數,所以也不會把填充內容當作資料庫的記錄本身。
同樣,對於漢字型檔這種資料庫,使用XMODEM協議來下載也不會產生問題。
2.3 校驗演算法
校驗碼是對發送數據進行某種計算得到的編碼,為了防止數據在發送途中某些位發生錯誤,各種數據通信協議規定發送方除了發送應用數據外,還要發送校驗碼,而數據接收方則根據同樣演算法從收到的應用數據中計算出校驗碼,並和發送方發送的校驗碼比較,如相等,才認為收到了正確的數據。
在XMODEM協議中,可使用垂直累加和或者CRC校驗,使用CRC校驗的通信軟體可以自動從CRC校驗自動切換到累加和校驗模式。在本應用中,我們使用垂直累加和校驗。
累加和校驗碼是將所有發送數據的和按位元組累加,保留其最低位元組作為校驗碼,例如,發送的3個位元組數據分別為255(FFh),5(05h),6(06h), 則:
1 1 1 1 1 1 1 1 FFH
0 0 0 0 0 1 0 1 05H
0 0 0 0 0 1 1 0 06H
1 0 0 0 0 1 0 1 0 -> 0000 1010
將高位丟棄後,得到累加和校驗碼為0Ah(10)。在上例中,如果原來數據在途中發生了變化,如FFH變為FEH,06H變為07H, 05H未變,則接收方所計算的校驗碼為:
接收 發送
1 1 1 1 1 1 1 0 FEH <- FFH
0 0 0 0 0 1 0 1 05H < - 05H
0 0 0 0 0 1 1 1 07H <- 06H
1 0 0 0 0 1 0 1 0 -> 0000 1010
校驗碼也為0AH。可見,在數據中有2位改變時,接收方所計算的校驗碼仍然與發送方一致,這種校驗方式不能檢測偶數位的誤碼。
XMODEM協議的校驗碼只對數據幀中的128位元組數據進行計算後得出,頭部3個位元組不參加校驗和運算。
2.4 XMODEM協議的啟動
XMODEM協議開始是文件接收方發出「NAK」位元組,文件發送方在收到該信號後發送數據幀,雙方開始正常通信過程。而文件發送方進入XMODEN協議後,等待對方發送」NAK」,如果等待時間超過60秒,則退出本次通信。
接收方發出「NAK」後,如果10秒後對方還沒有發送第一個數據幀,則重復發送「NAK」,這種重復次數最多允許10次,仍然沒有收到第一個數據塊,則退出本次通信。
(A):發送方軟體延遲100秒以上工作導致不能啟動協議
(B):接收方軟體延遲60秒發送」NAK」信號導致不能啟動協議
圖表 4 XMODEM協議不能啟動的2種情況
在嵌入式系統通過PC機來下載軟體的應用中,嵌入式系統軟體是文件接收方,PC機超級終端軟體是文件發送方。按照協議規定,嵌入式系統 的通信軟體進入XMODEM協議狀態後,PC機軟體必須在100秒內進入協議狀態(即執行超級終端的XMODEM文件傳輸功能),反之,後者先進入協議狀態,前者必須在60秒內進入協議狀態,顯然,通過人工來操作,這種時間差有些緊張。解決辦法只有加長嵌入式系統載入軟體的啟動等待時間,這種修改不會引起協議理解的歧義。
重要提示:為了發送和接收方能夠更容易啟動XMODEM協議,在設計中,將延長嵌入式系統下載軟體的啟動延時時間,在以下的代碼中,將這種延時時間改為600秒(10分鍾)。或者將等待時間設置為無限長,一致發出」NAK」信號,直到PC機上的超級終端軟體運行為止。
2.5 XMODEM的正常傳輸過程
中給出了一次正常的XMODEM通信中收發雙方的通信過程。
圖 5:沒有差錯的文件傳輸過程
文件接收方每收到一個數據幀後,如沒有校驗差錯、序號差錯等情況,均發送一個「ACK」字元作為應答,發送方在收到應答後才開始發送下一個字元,如此反復,直到文件內容傳送完畢,發送方傳送「EOT」字元表示傳送完成,發送方收到後再次以「ACK」回應,至此,整個文件傳輸過程就結束了。
2.6 XMODEM協議的中止
在通信進行過程中,雙方中的任意一方如果希望中止本次通信,可以發送「CAN」字元給對方,現在很多XMODEM協議軟體要求發送2個」CAN」字元來實現,
協議軟體的主動中止通信一般是人為發起的,例如按下超級終端軟體的「取消」按鈕。或者通過拔碼開關來控制嵌入式系統的下載軟體退出通信。
2.7 XMODEM協議的異常處理
在通信過程中,總是要出現各種異常情況,比如通信線路的突然中斷,一方機器停電而導致軟體中止執行等;通信軟體必須能夠檢測這些錯誤,並作出合理的處理。在前面的協議啟動一節中已經涉及到了錯誤檢測的問題,XMODEM對錯誤的規定很詳細,共計有8種情況,協議文本沒有說明是如何引起的,中給出了可能原因,
在嵌入式系統中,考慮到下載軟體一般均有人操作的,也可不考慮錯誤處理,這樣實現實現代碼會減小。在本文中,考慮到協議的完整性,考慮了各種錯誤的處理。
2.8 CRC校驗與累加和校驗方式的切換
XMODEM協議要求支持CRC校驗的通信軟體也能支持累加和校驗,這樣就可以和那些只支持累加和校驗的軟體進行通信,如果文件接收方只支持累加和,而發送方可支持CRC,接收方發送啟動信號為「NAK」,發送方收到後自動按累加和方式發送數據幀;如果相反,接收方支持CRC,而發送方支持累加和,接收方首先發出字母「C」來作為啟動信號,這時接收方應不理睬此信號,發送方在3秒後繼續發送信號「C」,共三次未收到應答後,改為發送「NAK」信號,表示使用累加和方式進行通信了。
如果通信雙方均採用CRC校驗,上述通信握手信號「NAK」用字母「C來代替,其他過程同上。
因為PC機超級終端軟體支持CRC模式,嵌入式系統作為文件接收方,只要發送「NAK」信號就能使對方自動按照校驗和方式通信了。
3 協議分層與層間介面
3.1 協議分層
我們將協議代碼分成3層:物理層,鏈路層和協議應用層。物理層用於控制UART器件,鏈路層處理XMODEM協議,應用層負責將收到的單個128位元組數據塊組合成一個完成的數據塊,並寫入程序存儲器緩沖區。這種分層,在程序移植時只要修改和硬體相關的物理層、應用層代碼,無需修改實現XMODEM協議的鏈路層代碼。
層與層之間通過消息來通信,XMODEM協議沒有規定分層結構和層間消息格式,這里將鏈路層與應用層之間、鏈路層和物理層之間的消息格式統一規定如下:
typedef struct {
int len; /* 消息內容長度,即Message中的內容位元組數 */
char mType; /* 層間消息類型, */
char Message[MAX_ MESSAGE_LEN]; /* 消息內容, 由發送進程填寫 */
} MessageOfLayer;
考慮到XMODEM數據幀為132位元組,定義常量「MAX_MESSAGE_LEN」為132位元組,按OSI標准,層間消息原語有數據請求、數據指示、響應、證實4種類型。給出了A方發送數據,B方接收數據時的層間消息類型圖 6: 單向數據傳送的層間消息順序:①②③④
消息1,2是承載實際數據的數據幀,消息3,4是傳送過程中的應答幀,表明數據已經正確傳送,必須說明的是,在發送數據的證實消息3不是從對方發出的,物理層在發送出數據後,立即向上一層發出證實消息。
在實際應用中,處理正常的數據傳送所需要的消息外,也需要定義一些控制管理消息,下面具體說明層間消息類型和作用。
3.2 鏈路層和物理層間的介面
n 數據請求:該消息用於向物理層發送XMODEM幀數據,包括132位元組的文件數據幀和NAK,ACK,CAN單位元組信號幀等,下載軟體只是接收文件,不需要發送132位元組的文件數據幀。
n 數據證實:物理層收到鏈路層的數據請求幀後,送到UART的緩沖器中,等發送緩沖器為空後,表明該位元組數據發送完成,向鏈路層發送證實消息,鏈路層接收到此消息後,就可以發送下一個位元組,實際上物理層傳送是一個無連接,證實消息不是由接收方產生的,不能表明對方已經正確接收到數據,而只表明已經發出數據。物理層協議一般也不提供有應答的傳輸機制。
n 數據指示:物理層在接收緩沖器滿後,將數據發送給鏈路層。
除了以上3個消息外,物理層和應用層之間還有以下2個消息:
n 啟動電路:由鏈路層向物理層發出,物理層在收到該協議後將串口進行初始化。
n 電路出錯:由物理層向鏈路層發出,用於報告物理層在數據傳送過程中的錯誤。
「數據響應」消息在本應用中不使用。
3.3 鏈路層和應用層間的介面
鏈路層和應用層之間的數據傳輸消息有二個:
n 數據塊指示:由鏈路層收到一個XMODEM協議幀(128位元組)後向應用層發出,應用層收到數據幀後寫入flash memory(PC版本寫入文件)。
n 數據塊塊響應:應用層收到XMODEM數據幀後,並寫入flash memory(PC版本寫入文件)後向鏈路層發出的響應信號。鏈路層收到響應後,向文件發送方發出「ACK」信號。
其他管理控制消息定義了3個:
n 協議啟動:應用層通知鏈路層啟動XMODEM協議。
n 通信結束:鏈路層在收到對方的EOT信號後向應用層發出,應用層收到此消息後,可以轉入應用程序入口,從而執行應用程序。
n 通信中止:鏈路層因為各種情況無法繼續進行XMODEM傳輸時向應用層傳送該消息,應用層收到此消息後,丟棄已經收到的數據,發出通信錯誤指示。
4 分層協議實現
4.1 協議的OS平台
為了實現分層協議,使用中的非搶先式操作系統作為軟體平台,各層分別作為一個進程。
4.2 應用層軟體實現
嵌入式系統下載軟體只接收代碼文件,對於協議中作為文件發送方的處理代碼可不編寫,應用層的任務是接收鏈路層的數據包,根據收到數據包的先後次序寫入程序存儲器,在PC機上模擬實現時,我們將數據存放在一個緩沖區內,完成後寫入文件中,使用windiff軟體和發送文件進行比較,以判斷代碼的是否正確。
應用層的進程初始化代碼的作用是:
n 擦除程序存儲器所使用的FLASH MEMORY(在本例中按29F010來編寫代碼)。
n 啟動一個10秒定時器,10秒後通知鏈路層啟動XMODEM協議。
n
C. ARM S3C2440 CPU 工作原理 及片內地址詳細解釋!謝謝
嵌入式ARM工控板 -- SBC2440-ISamsung S3C2440 單板計算機,支持觸摸屏,2USB,2網卡,SD卡,攝像頭 產品特點:
ARM9 S3C2440 CPU,最高400MHz 板載2MB Nor Flash,64MB Nand Flash 板載64MB Sdram 支持1 x 10/100M 網卡,1 x 10M網卡 支持5 x RS232串口 支持2 x USB,1 x USB Device 支持觸摸屏LCD顯示 支持百萬像素攝像頭 支持音頻介面 支持SD卡存儲 支持實時鍾和看門狗 產品規格簡介[229KB ]快速安裝指南[245KB ]高解析度圖片[109KB JPG] 規格說明:系統 CPUSamsung S3C2440 (ARM920T, 400MHz)存儲 板載 2MB Nor Flash,64MB Nand Flash內存 板載 64MB Sdram看門狗 Watch Dog TimerRTC支持實時時鍾,帶後備電池 I/O和通訊 USB2 x USB 1.1 Host,1 x USB 1.1 Device 串口 5 x RS232串口 (1 標准 DB9 串口和 2 x 3線串口,2個擴展串口TTL輸出)網口 1 x 10/100M 乙太網口, 1 x 10M 乙太網口擴展匯流排 I2C,SPI,PC104,4 x PWMGPIO16 x 通用I/O顯示 顯示介面 支持彩色STN/TFT液晶屏 解析度 320 x 240,640 x 480尺寸 標配3.5寸(320 x 240),選配8.4寸(640 x 480)觸摸屏 4線電阻式觸摸屏 存儲 Flash64MB Nand FlashSD卡 板上提供1個SD/MMC卡座 音效卡 晶元 UDA1341 音頻介面 支持麥克風音頻輸入和音頻輸出 視頻視頻輸入 支持1路CMOS Sensor介面,可接百萬像素CMOS攝像頭 軟體功能:軟體.6sbc_vivi
Xmodem支持 Xmodem 傳輸協議 USB(不提供源代碼)vivi增加 USB 下載功能, 支持USB下載/上傳鏡像功能Kernel 參數支持 kernel 參數設定 硬碟分區支持硬碟分區設定etc.其他Kernel 版本Linux kernel 2.6.13File 系統ROM/CRAM/EXT2/FAT32/NFS/YAFFSDriver中斷&定時器 支持系統中斷&定時器串口5個串口,提供原代碼10M 乙太網 CS890010M/100M 乙太網DM9000USB Host 支持USB 滑鼠, USB 鍵盤, U盤RTC提供源代碼ADCLinux2.6不支持 ADC 驅動AudioUDA1341LEDs Buttons用戶自定義按鈕Language支持多種語言選擇幀緩沖支持幀緩沖SD/MMC提供源代碼LCD支持解析度為240x320, 640x480, 480x272, 800x480 (提供源代碼)IDE不支持源代碼Network protoco& applicationlTCP/IPTCP/IP 協議File 傳輸(FTPclient/server)遠程登陸Telnet 協議Embedded GUI Qt/Embedded WinCE
4.2/5.0 Driver sbc_vivi
(不提供源代碼)vivi增加 USB 下載功能, 支持USB下載/上傳鏡像功能Eboot Ethernet bootloader for wince 串口 5個串口提供驅動 內存 提供Nand Flash 驅動 10M 乙太網 CS8900 USB Host 支持USB鍵盤、滑鼠 USB device LED RTC EINT LCD支持 240x320, 640x480解析度Audio UDA1341(提供源代碼)SD/MMC card(提供源代碼)