酔漢電子工作手帳

2004-09-12

JTAG ROMライタ

| 09:35 | JTAG ROMライタ - 酔漢電子工作手帳 を含むブックマーク はてなブックマーク - JTAG ROMライタ - 酔漢電子工作手帳

昨晩作ったJTAG ROMライタです。標準入力にS-RECORDフォーマットを入れると標準出力にADuC7020のフラッシュに書き込むgdbスクリプトを出力します。

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    char rec[64], bh[3], bl[3];
    int len, addr;
    char *p;
	
    bh[2] = 0;
    bl[2] = 0;
	
    while( gets( rec )){

        if ( toupper( rec[0] ) != 'S' )
            break;
        if ( rec[1] != '2' )
            continue;
        sscanf( rec, "S2%2x%6x", &len, &addr );
        p = &rec[10];
        len -= 4;	// omit address and check sum
        while( len > 0 ){
            if ( 1 == len ){
                strncpy( bl, p, 2 );
                printf( "set {short}0xFFFFF810 = 0x%04x\n", addr & 0xFFFF );
                printf( "set {short}0xFFFFF80C = 0x00%s\n", bl );
                printf( "set {char}0xFFFFF808 = 2\n");
                len -= 1;
                p += 2;
                addr += 1;
            }
            else{
                strncpy( bl, p, 2 );
                strncpy( bh, &p[2], 2 );
                printf( "set {short}0xFFFFF810 = 0x%04x\n", addr & 0xFFFF );
                printf( "set {short}0xFFFFF80C = 0x%s%s\n", bh, bl );
                printf( "set {char}0xFFFFF808 = 2\n");
                len -= 2;
                p += 4;
                addr += 2;
            }
        }
        printf("\n");
    }
}

ROMイレーサー

| 16:44 | ROMイレーサー - 酔漢電子工作手帳 を含むブックマーク はてなブックマーク - ROMイレーサー - 酔漢電子工作手帳

天気がいいのに今日は仕事で缶詰です。がしかし、ちょこちょこサボってgdb/OCDemonをつついています。昨晩フラッシュの全消去に失敗しました。そこで方針を変えて1セクターずつコマンドで消去することにしました。セクターサイズは2KBなので、全部で31回の消去、62回のコマンド発行になります。面倒なのでコマンドを生成するプログラムを作りました

#include <stdio.h>
int main(void)
{
    int i;
	
    for ( i=0; i<1024*62; i+=0x200 )
    {
        printf( "set   {short} 0xFFFFF810 = 0x%x\n", i );
        printf( "set   {char}  0xFFFFF808 = 5\n" );
    }
}

標準出力をファイルに格納します。たとえばerase.gdbに格納したとします。gdbのコマンドラインから

(gdb) target remote localhost:8888

(gdb) source erase.gdb

と入力すると、数秒で内部ROMを全消去できます。

gdb

| 16:56 | gdb - 酔漢電子工作手帳 を含むブックマーク はてなブックマーク - gdb - 酔漢電子工作手帳

gdbでhbreakコマンドをたたいたところ、「このハードウェアでは利用できません」と表示がでてくらくらしました。海外のwebを検索するとARM9でhardware breakpointが使えているという書き込みがありました。ARM9とARM7はパイプラインが違いますから必ずしも参考にはならないですが。

フリーのソフトなのであまり文句はいえないのですが、ちょっと不思議な気がします。環境の問題でしょうか。

一方で、gdbターゲットに接続しても、オブジェクトをダウンロードするまではステップ実行ができません。ところがダウンロードすると、相手がフラッシュだからかエラーが出ます。コマンドラインで対象ファイル名を指定して、コンソールから

(gdb) s

とやるとあっさりリセットポイントからステップ実行を始めるから不思議です。

故障

21:36 | 故障 - 酔漢電子工作手帳 を含むブックマーク はてなブックマーク - 故障 - 酔漢電子工作手帳

仕事をサボったばちが当たったのか、マイクロコンバーターのボードがうんともすんとも言わなくなりました。30年物のテスターで当たってみると、リセット信号がLに固着しています。追っかけていくとスイッチがショートモードで故障していました。こんなことっておきるのでしょうか。

仕事のほかにBFのTOPPERSもやらなきゃならなかったんだけど…

トラックバック - http://ecrafts.g.hatena.ne.jp/suikan/20040912