コスモリサーチの凄腕エンジニアたちが日々、難題と格闘した記録
Copyright Cosmo Research Corp.

UARTを使ってSDカードを書き換える

 装置の蓋を開けずにデザインを交換したいという要求があった。該当の装置は外部へのデバッグ用I/FがUSBを使ったUARTのみしかなく、UART経由でデザインを更新することを考える。

lrzを使用することで、TeratermのZMODEというものを使用してファイルを送信し、SDカードを更新できる。

方法

lrzコマンド

通常、petalinuxでは、

# petalinux-config -c rootfs

して、「Filesystem Package」->「console」->「network」の「lrzsz」を有効にすると、lrzコマンドが使用可能になる。 容易にSDカードが取り出せない状態で、何回も更新する必要があるような場合、便利なのかもしれない。(ただし速度が遅く11KB/sec)

*参考 http://aster-ism.hatenablog.com/entry/2017/07/11/223550

今回はこのlrzszを有効にしていない状態なので、力技でlrzコマンドを使えるようにし、ファイル転送を行う。lrzコマンドをテキストエディタでバイナリモードでASCIIデータとして開く。このASCIIデータをechoコマンドを使ってTeratermから転送し、lrzコマンドを作る。

f:id:cosmo-blog-admin:20200423152816p:plain
lrzコマンドのバイナリデータ(lrz_bin_echo.txt)

lrz_bin_echo.txtを送る際に、一度に70行ぐらいを転送しようとすると、Teratermの制限か何かで、途中までしか転送されないことがあるので、30行づつぐらいに刻んでコピペをするとよい。(1行に何文字あるか、にも依存すると思う。)

*参考 https://nagayasu-shinya.com/bash-echo-binary/

TeratermのZMODEを使用してファイル転送

あとはlrzコマンドを叩き、

# chmod 777 /path/to/lrz
# /path/to/lrz
lrz waiting to receive.**B0100000023be50

となるのでTeraterm上の「ファイル」->「転送」->「ZMODEM」->「送信」でファイル選び、転送する。

※ちなみに
前述したように転送速度が11KB/secとなり、今回転送したかったBOOT.BIN(約17MB)を転送するのに30分ぐらいかかる。