Visual HMI OTAアップグレード:OTA_init/OTA_writeとSDカードの自動アップグレード

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

OTAアップグレードAPI:HMIのアップグレードロジックとCommunicationプロトコルとデータソースの完全分離アップグレードデータがマザーボードシリアルポート、イーサネット、Wi-Fi、4 Gから来ていても、カスタムプロトコル、Modbus、HTTPを使用していても、HMIは標準APIを介して受信したデータを指定されたフラッシュ領域に書き込む責任があり、解凍が成功した後に自動的にアップグレードを再起動します。HMI MシリーズDxシリーズ対応。

1.️Flashプランニング(アップグレードの失敗/レンガの根本原因)

HMI80480M070を例にとると(標準品 128Mbit = 16MB):

プロジェクトプロジェクト#サイズは
Flashの総容量16 MB
システムファームウェア(OS+ドライバ、Mシリーズ)1 MB(DHシリーズ2 MB)
現在のプロジェクトprivate4.38 MB
合計使用済み。5.38 10.62 MBである。
OTA開始アドレスの要件最大8 MB(Flashの半分)

2つの鉄の法則OTA開始アドレスはFlashの後半から始まる必要があります。(残りの10.62 MBであっても≥8MBから)、新旧のプロジェクトのクロスオーバーを避け、アップグレードプロセス中に現在のシステムを実行し続けることができます。OTA書き込み領域は連続的かつアイドル状態でなければならないブロックアドレス機能を使用して高アドレス領域(10~12MBなど)を占めている場合、またはアップグレードパッケージがFlashの半分以上(≈ 10.62 MBパッケージ)を占める場合は、アップグレードできません。

2. APIの概要

関数の機能パラメータ説明書は
ota_init(md5, filesize, addr)md 5固定“0 123456 7 8 9 abcdef”;filesizeは.binの実際のサイズに厳密に一致します;addr ≥ Flashの半分アップグレード先の設定、ファームウェアデータの受信準備
ota_write(writeTb)バイトテーブル、≤ 20 4 8、自動補正0 x 0 0未満Flashセクションへのファームウェアのブロック書き込み
ota_check_upgrade(state)送信する1。整合性チェック+解凍+アップグレードのトリガー
ota_destory()-書き込み済みのOTA 残留データを消去(アップグレード前にクリア)
on_ota_progress(status, value)下の表を参照。検証/解凍の進行状況と結果のコールバック

on_ota_progressのstatus/valueの組み合わせ

status意味の意味value
1検証プロセスの開始固定 0です。
2検証結果の検証0=失敗ファームウェアの破損/MD5の不一致/1=成功
3解凍の進行状況0から100パーセント
4解凍の結果0=失敗/1=成功 →再起動

3.アプリケーション:SD Card Local Upgrade

3.1アップグレードパッケージの準備

プロジェクトコンパイル後の選択量産ダウンロード作成されたファイルにはota.binがあります。使用する前に、ota.binをa.binに変更してSDカールートディレクトリに置きます。

Visual HMI OTAアップグレード:OTA_init/OTA_writeとSDカードの自動アップグレードFigure

3.2文字を検出+a.binを検索

ota_filame   = "a.bin"
ota__start = 8 * 1024 * 1024    --OTA開始アドレス(少なくとも半分のフラッシュ)
flashsize      16 * 1024 * 1024   フラッシュの合計サイズ

function on_update slave vtype
  if vtype == VT_LW and addr == useraddr.ota_swich then
    sd_dir = 0の場合
      list_dir_dir               まずSDカードを見る。
    elseif usb_dir ~= 0
      list_dir usb_dir              もう一度、ディスクを見てください。
    elseさん
      set_string VT_LW useraddr.text "SDカードとUSBが検出されません。OTAアップグレードできません!! ")
    End of Endシングル
  End of Endシングル
End of Endシングル

function on_list_dir path、、type、fsize
  型== 1の場合
    if filename == ota_filename then
      set_string VT_LW、useraddr.text、"ファイル".. ota_filename..“検出されました”
      if fsize + ota__start flashsize then
        set_string VT_LW useraddr.text "ota.binファイルサイズが超過しました。アップグレードできません!! ")
      elseさん
        set_string VT_LW useraddr.text "アップグレード開始!!! ")
        set_uint32_LW、.ota_data、fsize
        ota.set_uppath.. "/".. ota_
      End of Endシングル
    End of Endシングル
  End of Endシングル
End of Endシングル

3.3コアアップグレードプロセスota.lua

function ota. set_upgrade path
  ローカル転送サイズ= 0
  ローカルサイズ= 0
  if file_open path 0 == true then
    size = file_size
    if size flashsize - ota__start then
      ota_roy                                  --残留 OTAデータの除去
      local sdota_addr = ota_init(0123456 7 8 9 abcdef,size,ota_addr_start)
      --末尾の補間ゼロ長を計算する
      local size_complement = 0
      サイズ% 20 48 ~= 0の場合
        size_ement = 2048 -size % 2048
      End of Endシングル
      while true doとは
        local data = file_read 2048               20 4 8を読む。
        if #data 2048 then                     タグ:0 x 00
          for i =#rddata + 1 2048 do rddata[i] = 0x00 end
        End of Endシングル
        TransferSize = TransferSize + #data
        local prg = string. %. 1f TransferSize * 100/size + size_ement
        set_uint16 VT_LW、useraddr.progress、math.modf TransferSize * 1000/ size
        set_string VT_LW、useraddr.text、ダウンロードの進行状況.. PRG..。quot; %
        refresh_screen
        ota_data                            --Flashに書き込み、ゼロ未満
        もしsize = TransferSizeが終了した場合
      End of Endシングル
      file_cl
      ota_check_up1                           - 検証、解凍
    End of Endシングル
  End of Endシングル
End of Endシングル

function on_ota_ress status value
  ステータス== 1、値== 0の場合
    set_string VT_LW、useraddr.text、検証開始
  elseifステータス== 2倍
    if value == 0 then set_string_LW.text、検証に失敗しました
    elseif value == 1 then set_string_LW.text検证成功end
  elseifステータス== 3時
    set_uint16 VT_LW useraddr.progress value * 10
    set_string VT_LW、useraddr.text、解凍の進行状況..価値..。quot; %
    refresh_screen
  elseifステータス== 4時
    if value == 0 then set_string VT_LW useraddr.text解凍に失敗しました
    elseif value == 1 then set_string VT_LW、useraddr.text、解凍に成功しましたend
  End of Endシングル
End of Endシングル

重要なポイント:ota_initのファイルサイズは.binの実際のサイズと厳密に一致しなければなりません。書き込みデータはフルストリーム(毎回≤ 20 4 8、末尾は0 x 0 0); ota_check_upgrade(1)の後、検証失敗はコールバックでStopし、解凍が成功すると自動的にアップグレードを再起動します。

4つの穴md 5引数は固定文字列“0 123456 7 8 9 abcdef”です。ファイルの真のMD 5ではなく、ファイルハッシュを計算する賢くないでください。addr ≥ Flashの半分と連続空き領域ブロックアドレスは高アドレス領域を占有しません。Flashの半分以上をアップグレードできない10.62 MBの空き容量は、10.62 MBのパッケージを保持できません。④アップグレード前のota_destroyの残りota_writeの末尾が20 48未満の場合、自動的にゼロになり、アライメントを自分で処理する必要はありません。アップグレード中に電源が切れる=レンガが変わり、量産前に必ずアップグレードプロセスを繰り返し検証する。

広州大彩科技Visual HMI開発ドキュメント(hmi-doc.gz-dc.com)LUAチュートリアル“OTAアップグレード”、著作権所有の大彩科技。

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.