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

無料無料技术资料

这篇内容可直接阅读,适合用于基础学习和検索引流。

OTAアップグレードAPI:HMIのアップグレードロジックと通信プロトコルとデータソースの完全分離アップグレードデータがマザーボードシリアルポート、イーサネット、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カードの自動アップグレード插图

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)の後、検証失敗はコールバックで停止し、解凍が成功すると自動的にアップグレードを再起動します。

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アップグレード”、著作権すべてのの大彩科技。

この資料を実際のプロジェクトに活用しませんか?

ツールセンターで電文解析、CRCチェック、デバイスデバッグを行うか、要件を送信して選定と接続のアドバイスを受けましょう。

エンジニア会員

この記事を実行可能なデバッグ資料に

登録すると、高度な電文解析、資料パックのダウンロード、コード例、エンジニアリングケース、優先技術サポートが利用可能に。実際のプロジェクト納品に最適です。

高度なツール無制限
資料パックとコードパック
完全なエンジニアリングケースライブラリ
優先技術サポート窓口

发表回复

あなたのメールアドレスアドレス不会被公开。 必須項目已用 * 标注