一、Y modem協議
X modem是較早的文件傳輸協議。Y modem是X modem的改良版,有傳輸快速穩定優勢,通常所說的Y modem一般指YModem-1K。
圖1 Y modem協議幀
二者核心差異可概括為下表:
點擊可查看大圖
二、基于X modem的OTA代碼修改
目前瑞薩官網提供的OTA代碼基于X modem協議(例如r20an0640ej樣例程序的System_BootLoader工程),改為Y modem協議需修改協議相關的傳輸邏輯、校驗邏輯、幀處理邏輯等部分。
01握手信號調整
X modem握手:
通常接收方可能以簡單ACK或特定字符(如有些實現中接收方發‘C’表示用CRC16校驗)啟動,邏輯相對簡單。
Y modem握手:
必須由接收方發起YMODEM_C(字符‘C’,ASCII碼0x43),發送方收到后才開始傳輸起始幀(含文件名、文件大)。
修改點:
新增函數void ymodem_send_c(void),用于發送Ymodem協議必需的0x43(‘C’)握手信號,通知發送方傳輸起始幀。
02起始幀結構與處理
X modem起始幀:
一般直接傳輸數據塊,無文件信息。
Y modem起始幀:
需將文件名、文件大小放入起始幀(以SOH133字節長度幀傳輸,包號固定0x00,包號反碼0xff)。
圖2 Y modem起始幀
修改點:
定義Y modem起始幀結構體ymodem_start_frame_t
修改幀校驗函數uint8_t xmodem_check_frame (uint8_t* const p_xmodem_buff),增加對起始幀格式的校驗邏輯。
03數據幀接收處理
X modem數據幀:
幀頭為SOH(128字節塊)或STX(部分衍生版1024字節塊),現有代碼幀頭為SOH(128字節塊)。
Y modem數據幀:
幀頭以SOH(128字節信息塊)、STX(1024字節信息塊)區分,傳輸時需按規則填充數據。SOH幀如最后一包不足128字節時的填充0x1A處理,最后一幀長度仍為133字節;STX幀最后一包數據小于等于128字節以133字節幀長度發送,大于128字節小于等于1024字節,以1029長度幀發送,無效數據填充0x1A。
圖3 Y modem數據幀
修改點:
修改uint8_txmodem_check_frame(uint8_t* const p_xmodem_buff),修改數據幀的接收處理。
04結束幀處理
X modem結束幀:
一般發送EOT(0x04)字符,接收方回ACK即結束。
Y modem結束幀:
采用SOH133字節空包(數據區、校驗等填0x00)作為結束幀,需構建對應結束幀發送邏輯:
圖4 Y modem結束幀
修改點:
修改uint8_t xmodem_rx_frame (uint8_t* p_xmodem_buff),對結束幀進行判斷,響應兩次EOT,分別回復NACK和ACK。
05校驗機制升級
X modem校驗:
使用校驗和或CRC16,目前X modem例程使用校驗和。
Y modem校驗:
Y modem強制規范使用CRC16校驗,且計算范圍明確為信息塊數據(不含幀頭、包號等)。需確保CRC16計算函數精準,修改原X modem可能存在的簡易校驗邏輯:
修改點:
新增static uint16_t CRC16_check (unsigned char *q,int len)函數,對數據進行CRC16校驗。
移除Xmodem校驗和邏輯,強制使用CRC16校驗。
06數據緩沖區配置
X modem數據緩沖配置:
XModem數據包會被送入一個由buffer.c控制的緩沖區。該緩沖區為循環緩沖區,即當到達緩沖區末尾時,會回環至起始位置。由于數據幀接收的數組從132字節變成1029字節,RAM開銷變大。
XModem例程里,每個packet132bytes(128數據+3header+1校驗),代碼中的XMODEM_FRAME_SIZE是132U。
Y modem數據緩沖配置:
YModem例程里,定義YMODEM_FRAME_SIZE_1024為1029U,YMODEM_FRAME_SIZE_128為133U。
定義環形存儲的BUFFER_SIZE定義為1542,保持原有配置,數據的解析正常。
修改點:
可根據實際測試結果增加BUFFER_SIZE
07硬件驅動與配置適配
瑞薩RX系列需確保串口驅動適配Y modem的波特率、數據位、停止位等配置,可以使用smart configurator進行驅動配置(如常見的波特率 115200bps、8數據位、1停止位、無校驗等)。
088多文件傳輸適配
若OTA需傳輸多個文件,需在代碼中添加多文件遍歷、逐個構建起始幀+數據幀+結束幀的邏輯。由于客戶只要求傳輸單個文件,不涉及相關修改。
三、實測結果
01測試環境搭建
點擊可查看大圖
02功能測試
MCU執行bootloader升級程序,串口輸出"Please start file send using YModem protocol...";
Teraterm選擇Ymodem協議發送固件文件;
傳輸過程中通過Bus Hound抓取幀序列,驗證:
起始幀(文件名/大小正確);
數據幀(1024字節塊與CRC16校驗正確);
結束幀(判定正確)。
升級完成后,MCU自動跳轉至新固件,功能驗證通過。
-
mcu
+關注
關注
146文章
18013瀏覽量
368411 -
瑞薩
+關注
關注
36文章
22389瀏覽量
88117 -
串口
+關注
關注
15文章
1590瀏覽量
80138 -
代碼
+關注
關注
30文章
4905瀏覽量
70886 -
文件傳輸協議
+關注
關注
0文章
4瀏覽量
943
原文標題:使用Y modem協議進行瑞薩RX MCU OTA數據傳輸
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
如何使用IrDa進行紅外數據傳輸?
DMA進行數據傳輸和CPU進行數據傳輸的疑問
數據傳輸的通信系統設計
基于短消息的OTA數據傳輸安全機制
如何實現MQTT協議數據傳輸?
DTU的多種協議,解鎖數據傳輸的無限可能

評論