MobileHackerz
HOME > IrGEAR for KEITAIでお手軽マイコン遊び




IrGEAR for KEITAIでお手軽マイコン遊び


IrGEAR for KEITAI
ROM書き換えの準備(ハードウェア編)
ROM書き換えの準備(ソフトウェア編)
サンプルアプリケーション
μiTRONの移植


Special Thanks: いしかわきょーすけ様 (分解くん)


※こちらで紹介している分解・改造に関してはあくまでも参考のために紹介しているものです。改造を行いますとメーカー保証は一切受けることができません。あたりまえのことですが、壊れたからといって修理することはできませんので、 すべて自己責任で、自らの判断のもとで行ってください


IrGEAR for KEITAI

IrGEAR for KEITAIとは、Link Evolution社が発売している 「携帯(PDC)に赤外線通信機能を付加するためのアダプター」です。
同様の製品に加賀電子iTAX-irDAがあります。

これらの商品が、ここ最近若松通商などで1980円で売られるようになりました。
で、実はその中にはROM書き換え可能なマイコンチップが搭載されているとのことで、そりゃ面白そうだ、とちょっといじって遊んでみることに。



ちなみに、 IrGEAR for KEITAIiTAX-irDAの違いですが、バラしてみたところ

IrGEARとiTAX-irDA

そう、基板の形状まで含めて中身は全く同一でした。
違うのは外側のケースと発売元だけなので、個人的にケースの形状が好きなiTAX-irDAのほうを今後は買っていきたいと思っています。




ROM書き換えの準備(ハードウェア編)

IrGEARに搭載されているH8S/2134(FZTAT版)は、 CPUをブートモードというモードに切り替え専用のツールを使うことで、外部から内蔵ROMを書き換えることができます。
つまり、ブートモードへの切り替えかただけわかればこっちのもの

H8S/2134は資料(ハードウェアマニュアル)によると
ピン 論理
MD0 L
MD1 L
P90 H
P91 H
P92 H
とすることでブートモードで起動する、と書かれています。
ピンを追ってみると、どうやらMD0は最初からLになっていて、MD1は

ここをショートするとブートモードになります

ここに引き出されているみたいです。
次にP90〜P92ですが、P90はどうやらボタンに繋がれています。プルアップされていて押されるとLとなるみたいですので、 押さずにいればブートモードへの条件が満たされます。また、P91,P92はどうやら未処理のままでも大丈夫なようです。
つまり結論としては、R12をショートするだけでブートモードへ入ります。

ブートモードで使用するシリアルポート(TxD1, RxD1)は携帯電話への接続に使われていますので、PDC16芯コネクタの6pin:TxD 7pin:RxDとして 引き出します。R12(MD1)をうまく16芯の空きピン(予約端子)に出してやることで外観を変えずにマイコンモジュール化することができそうです。
(残念ながら手元のPDCコネクタは空きピンの部分にもともとピンが無かったので現在のところは試していません)
ちなみにPDCでは8,11,16が予約端子とされています。

以上を踏まえて、引き出す端子をまとめると以下のようになります。

主要な引き出し線ポイント

ここでのシリアル(TxD,RxD)は3V論理ですので、それにあわせてRS-232Cをレベルコンバートしてあげる必要があります。
5V,3.3V両対応のRS232Cトランシーバが秋月電子に250円で売っている(SP3232ECP)ので、適当にレベル変換回路を組んでおきましょう。
(添付のデータの通りに添付のコンデンサをぶらさげるだけですが)
上図のように電源ラインも引き出して、外部から3Vを供給できるようにしておくと電池を気にせず遊べて便利です。

というわけで、我が家では最終的にこんな感じになっています。

シリアルで接続

ブートモード・外部電源のON/OFFの各スイッチとレベル変換、電源供給(3.3Vの三端子レギュレータ)をひとまとめにして3V系書き込みケーブルとしてホットボンドで固めてあります。
今回のIrGEARだけでなく、H8/3664あたりで遊んだりする時にもひとつあると便利です。




ROM書き換えの準備(ソフトウェア編)

すでにH8(H8S)のコンパイル環境が揃っている人はそのままで、無い場合はgccなどで揃えてください。
gcc環境の構築については説明を飛ばします。(検索すれば山ほど解説があるはずです)

書き込みツールはさまざまな種類がありますが、今回H8S/2134に対応している(注:H8S/2134A用は使えません)書き込みツールとして Flash Simpleを使いました。 フォームに必要事項を記入することで無料にてダウンロードできます。(※日立の半導体部門のルネサステクノロジへの移管に伴い、現在このツールをダウンロードするリンクは消滅しています。が、ファイルだけはまだサーバ上にあるみたいです。このリンクからのダウンロードは自己責任でお願いします。…というか、Flash Simple、ルネサスのWebに復活させてくれないかなぁ…)

ダウンロード・インストールしたら、Flash→Settings...を開いて

設定画面

このように設定します。(Port nameの設定は各自の環境にあわせてください)
書き込む時はIrGEARにシリアルポートを接続し、ブートモードにして(R12をショートし)、コンパイル済プログラム(motファイル)を選択、FLASH programを押せばOkです。
※書き込みを開始した段階で製品に書き込まれていたファームウェアは完全に消去されます。二度と製品として使用することはできませんのでご注意ください

設定画面




サンプルアプリケーション


とりあえず動作が確認できる程度の、書きなぐったサンプルを掲示しておきます。


main.c

#include "ioport.h"

#define OFF  0
#define ON   1
#define NEG  2

void putc(char ch) {
	while ((SSR1 & 0x80)==0);
	TDR1 = (unsigned char)ch;
	SSR1 &= 0x7f;
}

void print(char *str) {
	while (*str != 0) putc(*str++);
}


// ================================================================
//   IG_BUZZER : ブザーのON/OFF
//   ------------------------------------------------------------
//   第1引数> 音階(小さいほど高い)
//   第2引数> ON/OFFフラグ
// ================================================================

void IG_BUZZER(unsigned char snd,unsigned char flag) {
	if (flag==0) {
		MSTPCRH |= 0x10;			// タイマモジュール電源Cut
	} else {
		// Buzzer P44:TMO1
		MSTPCRH &= 0xEF;
		TCORA1  = snd;				// タイムコンスタントA
		TCONRO  = 0x00;
		TCSR1_  = 0x03;				// コンペアマッチAで反転
		TCR1    = 0x0B;
		STCR    = 0x00;
		TCNT1   = 0;
	}
}


// ================================================================
//   IG_KEY : ボタン状態の読み込み
//   ------------------------------------------------------------
//   返値> 0:押されていない  1:押されている
// ================================================================

int IG_KEY() {
	return ((~P9DR) & 0x01);
}


// ================================================================
//   IG_WAITKEY : ボタンが押されるまで待つ
// ================================================================

void IG_WAITKEY() {
	while (IG_KEY()!=0);
	while (IG_KEY()==0);
}


// ================================================================
//   IG_LED : LEDの点灯/消灯
//   ------------------------------------------------------------
//   第1引数> ON/OFFフラグ (NEG:状態反転)
// ================================================================

void IG_LED(unsigned char flag) {
	if (flag==OFF) {
		P9DR |= 0x80;
	} else if (flag==ON) {
		P9DR &= 0x7F;
	} else {
		P9DR ^= 0x80;
	}
}






int main() {
	int i;

	// Initialize SCI1
	MSTPCRL &= 0xBF;			// モジュールストップレジスタ: SCI1動作
	SMR1 = 0;
	BRR1 = 11;					// 19200bps
	SCR1 = 0x30;
	i = SSR1;					// dummy read
	SSR1 = 0x80;

	// ボタン:P90
	// LED : P97 (0:LED ON  1:LED OFF)
	P9DDR = 0x80;


	print("IrGEAR Hack Hack Hack!!\r\n");

	EnableINT;

	while(1) {
		IG_WAITKEY();
		IG_BUZZER(5,ON);
		IG_LED(ON);
		IG_WAITKEY();
		IG_BUZZER(5,OFF);
		IG_LED(OFF);
		IG_WAITKEY();

		IG_BUZZER(8,ON);
		IG_LED(ON);
		IG_WAITKEY();
		IG_BUZZER(8,OFF);
		IG_LED(OFF);
	}
}

test.zip (ソースファイル,motファイル)

IrGEAR for KEITAIのうち、シリアルポート(TxD1,RxD1)、LED、ボタン、ブザーを制御しています。
ボタンはP90、LEDはP97、ブザーはP44(TMO1)に接続されているようです

サンプルソースのアーカイブには、Makefile,スタートアップルーチンなどコンパイルに必要な一式が含まれていますので、参考にしてください。











管理人へのメールについてはこちら
MobileHackerz - It is not cracking but happy hacking!