いろんなものはつながっている

組み込みOS自作入門(4)シリアル経由でファイルを転送する

ブートローダ

だいたいのROMにはメーカが保障する書き込み回数に制限があるため、ROMにはOSの実行形式をどこからからダウンロードしてくるプログラム(ブートローダ)を書いておくことが多い。特に開発中はブートローダを利用し製品化の段階でOSの実行プログラムをROMに書き込むこと(ROM化)は一般的にとられる手法。ROM化に方法には

シリアル経由でのファイル転送

ブートローダがOSをダウンロードするのにシリアル経由でのファイル転送を利用する。シリアル経由のファイル転送プロトコルにはXMODEMを用いる。

XMODEMプロトコル

XMODEMプロトコルの大まかな流れは以下。
シリアル経由1

またブロックのフォーマットは以下。

シリアル経由2

XMODEMの実装

XMODEMでデータを受信するにはまずは受信が開始されるまで送信要求(NAK)を出して、送信側からデータがきたらその一文字を目をみて受信を開始する。受信が始まったのを検知するのはシリアルコントローラのレジストリを見ている。

while(1) {
	if(!receiving) {
		xmode_wait(); // 受信が開始されるまで送信要求をだす
	}
	
	c = serial_recv_byte(SERIAL_DEFAUL_DEVICE);	//一文字受信
	
	if(c == XMODEM_EOT) { // 受信完了
		serial_send_byte(SERIAL_DEFAULT_DEVICE, XMODEM_ACK);
		break;
	} else if(c == XMODEL_SOH){
		receiving++;
		r = xmodem_reak_block(block_number, buf)
		if(r < 0) {	// 受信エラー
			serial_send_byte(SERIAL_DEFAULT_DEVICE, XMODEL_NAK);
		} else {
			block_number++;
			serial_send_byte(SERIAL_DEFAULT_DEVICE, XMODEL_ACK);
		}
	}
}

ファイルの転送

Minicomの設定を本の通りに行い、minicomを起動。マイコンに電源を入れROMからブートする。コマンドプロンプトが表示されたらとりあえず起動は成功。ここからloadを実行し、ファイルをXMODEMプロトコルで転送する。loadを実行すると上図のようにマイコンからNAKが定期的に送信されてきている(はず)。その状態で、Minicomで「Ctrl + a」「s」をキー入力してファイル転送メニューにはいって転送するファイル名を指定する。

マイコンに書き込んで起動。

シリアル経由3

loadと打ち込んだのち、Ctrl+a, sでファイル転送メニューに入る。

シリアル経由4

転送に成功。

シリアル経由5

あらかじめ用意しておいたdumpコマンドで転送したファイルをdump

シリアル経由6

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

スポンサード リンク

カテゴリー

スポンサード リンク