U-Boot移植串列埠xmodem協議_附測試程式碼

NO IMAGE

 

U-Boot移植串列埠xmodem協議

 

   今天完成了U-Boot上串列埠xmodem協議,實現了通過xmodem協議的資料傳輸,現將筆記整理如下。
   串列埠xmodem的移植比較簡單,參考ymodem協議就行。

實驗環境:Linux ubuntu 9.10(來自韋東山老師光碟自帶虛擬機器)

開發板:
Jz2440(ARM9   S3C2440
        NAND   K9F2G08

        SDRAM  K4S561632 * 2)

U-Boot: u-boot-1.1.6

燒寫工具: OpenJtag

串列埠軟體:SecureCRT

一、增加loadx命令

    在cmd_load.c (路徑:u-boot-1.1.6/common/cmd_load.c)中增加一條U_BOOT_CMD命令以支援xmodem。

找到loady命令的U_BOOT_CMD結構體,緊跟其後增加loadx的U_BOOT_CMD。

U_BOOT_CMD(

       loady, 3, 0, do_load_serial_bin,
       “loady- load binary file over serial line (ymodem mode)\n”,
       “[ off ] [ baud ]\n”” – load binary file over serial line””
with offset ‘off’ and baudrate ‘baud’\n”

);

U_BOOT_CMD(
          loadx, 3, 0,do_load_serial_bin,
         “loadx- load binary file over serial line (xmodem mode)\n”,
         “[ off ] [ baud ]\n””- load binary file over serial line””
with offset ‘off’ and baudrate ‘baud’\n”

);

紅色為新增部分。

二、增加loadx命令處理分支

   在檔案cmd_load.c(路徑:u-boot-1.1.6/common/cmd_load.c)中找到函式do_load_serial_bin(),新增加loadx的分支,修改後如下:

if (strcmp(argv[0],”loadx”)==0) {
   printf (“## Ready for binary (xmodem) download “”to 0x%08lX at %d bps…\n”, offset,load_baudrate);
   addr = load_serial_xmodem (offset);

} else if (strcmp(argv[0],”loady”)==0) {

   printf (“## Ready for binary (ymodem) download””to 0x%08lX at %d bps…\n”,offset, load_baudrate);
   addr = load_serial_ymodem (offset);

} else ……

紅色部分為新加入loadx處理分支。

三、新增load_serial_xmodem()函式

   在檔案cmd_load.c(路徑:u-boot-1.1.6/common/cmd_load.c)中仿照load_serial_ymodem()實現load_serial_xmodem()函式,沒有什麼技巧,主要修改以下兩點:

1.區域性陣列ymodemBuf改為xmodemBuf;

2.info.mode的值由xyzModem_ymodem改為xyzModem_xmodem。程式碼太多,完成後的函式見附件cmd_load.c。

   特別注意,需要在檔案cmd_load.c(路徑:u-boot-1.1.6/common/cmd_load.c)的開頭增加函式load_serial_xmodem()的宣告。

#if (CONFIG_COMMANDS & CFG_CMD_LOADB)

static ulong load_serial_ymodem (ulong offset);

static ulong load_serial_xmodem (ulong offset);

#endif

  紅色為新增。

   xmodem協議移植完畢後,重新編譯u-boot,然後燒寫到開發板。

四、測試串列埠xmodem協議

   為了測試移植是否成功,使用串列埠xmodem協議下載一個LED程式到SDRAM中執行(LED閃燈程式連結地址在0x30000000處,原始碼見附件)。

   使用串列埠線連線好開發板與PC,開啟SecureCRT,選擇與開發板適應的波特率,開發板上電,進入u-boot介面,在u-boot命令列輸入“?”或者“help”,可以看到loadx協議的命令提示。

imls    – list all images found in flash
itest   – return true/false on integer compare
loadb   – load binary file over serial line (kermit mode)
loads   – load S-Record file over serial line
loadx   – load binary file over serial line (xmodem mode)
loady   – load binary file over serial line (ymodem mode)
loop    – infinite loop on address range
md      – memory display
mm      – memory modify (auto-incrementing)
mtest   – simple RAM test
mw      – memory write (fill)

在u-boot命令列輸入loadx 0x30000000。

JZ2440 # loadx 0x30000000

## Ready for binary (xmodem) download to 0x30000000 at 115200 bps…

CCCCCCC

   u-boot已經在等待資料了。

   在SecureCRT選單中選擇“傳輸->傳送Xmodem(N)”,如圖1。

選擇傳送Xmodem.jpg(64.97
K)

2012-3-6 22:14:27

圖1選擇傳送Xmodem

   在彈出的對話方塊中選擇leds.bin,開始資料傳輸。如圖2。

選擇傳送bin檔案.jpg(20.15
K)

2012-3-6 22:14:27

圖2選擇傳送bin檔案

JZ2440 # loadx 0x30000000

## Ready for binary (xmodem) download to 0x30000000 at 115200 bps…

CCCCCCCCCC

開始 xmodem傳輸。  按
Ctrl C 取消。

100%
168 bytes
168 bytes/s 00:00:01
0 Errors

xyzModem – CRC mode, 2(SOH)/0(STX)/0(CAN) packets, 10 retries

## Total Size
= 0x000000a8 = 168 Bytes

  

   傳送完畢,輸入go命令執行程式。

JZ2440 #go 0x30000000

## Starting application at 0x30000000 …

   可以看到在Jz2440開發板上leds已經開始閃爍了。說明移植xmodem協議OK!

五、小結

   串列埠的xmodem移植比較簡單,也很容易看到效果,比較適合初學者。如果想僅僅測試xmodem移植效果,可以直接使用附件中的cmd_load.c檔案替換掉原始檔(路徑:u-boot-1.1.6/common/cmd_load.c)即可。如果在傳輸資料時,串列埠上時間沒有反應,請按 Ctrl C 取消,然後重新再試一次基本就OK。

六、參考資料

《嵌入式Linux應用完全開發手冊》-第15章
U-Boot分析與移植

七、附件

   leds測試程式,連結地址0x30000000

  

leds_0x30000000.rar( 7.11 K, 下載次數:3)

   移植好xmodem協議的cmd_load.c

  

cmd_load.rar( 7.37 K, 下載次數:1)

 

 

宣告:本文為個人原創,邊移植邊寫,完全來自實踐。本文首先發表在百問網(www.100ask.net)轉載請指明出處。

原文地址:http://www.100ask.net/forum/showtopic-3631.aspx

 

免費視訊下載地址:

第1期共33個視訊,免費,下載後可以直接觀看,下載地址:
http://115.com/folder/fa55184z#
http://dl.dbank.com/c03o1ebwlo
第一期視訊從Linux安裝開始,講解了SDRAM、NAND
FLASH、LCD等硬體操作,U-Boot的移植、核心移植、簡單字元驅動的編寫,非常詳盡。

第二期視訊主要是驅動深入講解,精華啊!

第二期視訊需要收費的哦,具體見韋東山老師淘寶店鋪:

http://100ask.taobao.com/

 

書籍資料下載:

《嵌入式Linux應用開發完全手冊》及相關資源電爐可以下載:

http://www.verycd.com/topics/2828590/

      嵌入式linux應用開發完全手冊光碟裡的驅動和例子原始碼.rar詳情

嵌入式linux應用開發完全手冊.pdf詳情

 

如果能買一塊韋東山老師的開發板,加上視訊講解,加上書,那學起來就太Easy了!

淘寶店鋪上http://100ask.taobao.com/全套都有了!!!