Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

RX63NのユーザーブートモードとT4ライブラリ

ユーザーブートモードにて、イーサネット(TCP/IP)経由により、ユーザーROM(ファームウェア)の
書き換えは可能でしょうか?(サイズや割り込み、その他の問題)

  • FAQ 1011614 : ユーザブートモードでユーザ領域を書き換えた後、MD端子 ...

     

    これも問題解決にはあたりませんね、USBとシリアルであればやったことがあるのですが、

    ユーザーブートモードでイーサネットは聞いたことがありません

    ユーザーモードであれば可能でしょうが。

  • わわいです
    ブートエリアの中に、イーサネットドライバ、TCP/UDPプロトコルドライバ、フラッシュ書き換えドライバなどなどを収めることができるなら可能でしょうけど。
    いかに必要な機能だけで再構築するか、になってくると思われますが
  • shouです。
    ユーザブートでのイーサネット対応はやはり厳しいようですね。
    ユーザブート領域が16Kbyte、T4ライブラリのROMサイズが24Kbyte以上必要ですね。
    ユーザーモードではRAM上で動かす必要があり、色々考慮する必要があるので、それはそれで大変ですよね。
  • shouさん

    こんにちは、シェルティです。

    組み込み用TCP/IP M3S-T4-Tiny(T4ライブラリ)の設計を担当してます。
    (最近はRXマイコンのセキュリティIPのドライバの設計やそれを活用したプロモーション活動なども担当してます)

    RX63NのユーザブートモードとT4のお話ですが、結論からいうと無理ですね。
    理由はユーザブートモードの容量16KBに対し、T4ライブラリが23KBあるからです。
    Etherドライバが数KB、フラッシュ制御が数KB必要で、RX64Mのようにユーザブートが32KBあっても少々辛いといった感じでしょうか。
    T4ライブラリはコード公開しているのでカスタムすれば何とかなるかもしれません。
    あとはTCP/IPを提供しているパートナー企業殿に依頼して16KB以内で何とかならないかを相談して
    カスタムソフト開発を依頼する手もあるかもしれないです。

    もうひとつの道ですが、ユーザブートモードではなくてシングルチップモードで内蔵ROM(プログラムROM)にTCP/IPやフラッシュ制御を配置していく方法があります。
    MD端子でモード切替ではなくて、汎用ポートにスイッチを取り付けてシングルチップモード内で論理的にモードを切り替える感じですね。
    モード切替の概念も取り払って、通常ユーザプログラム中にファームアップデートの仕掛けを搭載するのもありでしょう。
    たとえば、ルータ製品のファームアップデートのようにマイコンにウェブサーバを載せておいて、
    ブラウザからアップデート用のMOTを転送してもらいながらセルフプログラミング、といったことも可能です。

    あと、上記はできる・できない、の話ですが、面倒・面倒でない、という話も実はあります。
    というのはフラッシュの(コードフラッシュに対する)BGO機能というのを
    RX64M、RX71M、RX65N(上位機種のみ)の世代から搭載しておりまして、
    これがあるとフラッシュ書換制御中にROM上のプログラムが動作させることができ、
    ファームアップデートの実装が非常に楽です。
    逆を言いますとRX63Nの場合は(コードフラッシュに対する)BGO機能がないので、フラッシュ書換制御をRAMで実行するようにソフトウェアを組んでおき、書換中はRAMにプログラムカウンタを移動する必要があります。
    またファームウェアは通信路経由で転送されますから最大RAM=256KBに一時的に保持することになり、最大ROM=2MB分ですので、すべてを一度にRAMに蓄えられません。
    このため、数KB分をTCP/IPで受信⇒フラッシュ制御(RAM実行必須)⇒数KB分をTCP/IPで受信⇒...を繰り返していく必要があります。
    またフラッシュ制御中に割り込みが入るとその割り込みを処理するための割り込みベクタ、および、割り込みベクタが指し示す先もRAMに配置する必要があります。
    やってやれなくはないですが「面倒」ですね。BGO機能はこれを解消することができます。

    実現性検討用の実験ではありますが、RX231のSDHIにSDIO無線LANモジュールを接続し、
    T4を載せてTCP/IP経由でファームアップデート機能を実現することはできました。
    このときは上記説明のようにシングルチップモードを使用しています。
    「面倒」もメカニズムさえ分かった状態で作り込めば問題なしでした。

    以上です
  • shouです。
    シェルティ様、ありがとうございます。
    T4ライブラリのソースコード公開の件は知りませんでした。
    早速試してみました(改造は無理なので、DHCPとUDPのみ削除)が、サイズは16Kbyteを超えますので、
    やはりユーザブート領域へは収まりませんね。
    現実的にRX63Nでは、シングルチップモード(ユーザープログラム)での対応しか残されていない事は理解できました。
    書き換え中の上位アプリの停止や、電源断なども考慮した設計や、さまざまな「面倒」を未経験な者が対応するには大変な覚悟がいるでしょうね…。
  • In reply to shou:

    shouさん

    シェルティです、こんにちは。

    種々ご検討いただきありがとうございます。
    ご指摘通りでカスタムしても16KB以内は難しそうですね。
    TCP/IPはその名の通りでTCPに主要機能がぎっちり積み込まれてます。

    ファームアップデートは今後の組み込み機器の機能として必須になると私は読んでいます。
    最新の安全規格を勉強すると、「セキュリティホール発覚後、速やかにパッチできるよう、
    ファームアップデート機能を実装せよ」と書いてあることが増えてきました。

    ただ言うは易しで実装が難儀なので標準的なソフトウェアを準備して配布したいと思っています。

    まずはフラッシュモジュールを使ってシングルチップモードで
    セルフプログラミングをする方法を実機検証して試作してみるのをお勧めします。

    まだ標準化はできていませんが、私が考えるリーズナブルなファームアップデート方法を実装した
    サンプルコードが以下にあります。もしかすると参考になるかもしれないです。
    書換中に電源が切れても自動で復旧します。
    (ハード的に壊れたら復旧しなくなりますが論理的に壊れることは無くなりますので、
     トータルで壊れる確率が激減すると思います)

    RX65N Envision Kitというボードで動作します。
    www.renesas.com/.../rx65n-envision-kit.html
    ⇒デモファームウェア(ソースコード)
     ⇒\rx65n_envisionkit\benchmark\rx65n_envision_kit_demo\src\src\firm_update.c

    BGO機能使ってますが、フラッシュ書換中に割り込み処理をすることを諦める(割り込み禁止にしておく)ようにすれば、
    RX63Nでもだいたい同じようなコードでファームアップデートが実現できると思います。
    あとUSBメモリ経由でファームウェアのデータを読み込んでいますが、
    これもRead関数をTCP/IPのreceive関数に繋ぎ変えてあげればネットワーク経由になります。

    ファームが書き換えられていく様(メモリマップの遷移)は以下テキストが参考になると思います。
    \rx65n_envisionkit\rx65n_envisionkit_demo_readme.txt
     ⇒Technical Info

    以上です
  • shouです。
    シェルティ様、度々の対応ありがとうございます。

    「・・・・RX65N 標準的なソフトウェアを準備して配布・・・・」 早めのリリースを期待しつつ、まずはご紹介頂いた、RX65N Envision Kit の情報を入手、検討してみます。
  • In reply to shou:

    わわいです。
    LANポートからのユーザブート、
    ライブラリ類は無駄にサイズが膨らむので一切使わずに、全てスクラッチで組んでいき、IPは決め打ち、UDPのみの実装でやればなんとか収まりそうなよかんもせんでもないけど。。

    #実際にやってみーと言われても困るので傍観

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page