アーカイブ
最近のエントリー
リンク
Powered by
Movable Type 3.35

2007年05月27日

CP2103GPIOを利用したフラッシュROMへの書き込み

CP2103GPIO.exeを利用してワンチップCPUのフラッシュROMへ書き込みを行う。
作成した便利ボードではGPIOのビット3をブートモード切り替えに、ビット2をリセットにつなげた。
GPIO3   1ならブートモード、0ならユーザモード
GPIO2   1ならリセット状態、0ならリセット解除状態
フラッシュROMへの書き込みは次のバッチファイルを起動している。
CP2103GPIO.exe com3 w 1100   ' ブートモード、リセット状態
CP2103GPIO.exe com3 w 1000   ' ブートモード、リセット解除
FDT.lnk          ' フラッシュ書き込みツールを起動
echo ターゲットシステムを起動します。
pause
CP2103GPIO.exe com3 w 1100   ' ブートモード、リセット状態
CP2103GPIO.exe com3 w 0100   ' ユーザモード、リセット状態
CP2103GPIO.exe com3 w 0000   ' ユーザモード、リセット解除

参考回路図(部品がなく動作未確認)

これでブートモードスイッチが不要になった。(それだけなのにかなり苦労してしまった)

投稿者 やんもす : 01:00 | コメント (3)
コメント: やんもす : 2007年05月27日 09:56

追記:上記ではデフォルトで起動の度にリセット状態だ。
なぜならCP2103のGPIOのデフォルト設定が次のため。
   Mode: Open Drain
   LatchValue: 1
   ControlledBy: Manually by Host
そこでアプリケーションノートAN223のツール
   CP210xPortConfig.exe
によりデフォルトのLatchValueを0に書き換える。
これで電源投入直後にユーザモードで起動できる。

コメント: やんもす : 2007年05月31日 01:13

早くも故障してしまった。
HiレベルのはずのTXD端子が0.5Vしかなくて通信できない。
回路エラーかな。マニュアルの読み直しから始めよう。

コメント: やんもす : 2007年06月01日 22:39

CP2103のRXDに5Vをかけちゃったのがまずかったのかな?
回路図を修正してみたが部品がないので確認できない。

2007年05月26日

SiliconLabs製CP2103のGPIO出力操作

便利ボードのためにCP2103のGPIOの出力を操作する簡単なソフトをWin32コンソールプログラムで作成した。
1.環境
WindowsXP
VisualC++Express
MicrosoftPlatformSDK
2.必要なもの:SiliconLabs社のアプリケーションノートAN223より下記ファイル。
CP210xRuntimeDLL.h
CP210xRuntimeDLL.def
CP210xRuntime.lib
CP210xRuntime.dll
3.ソースリスト
#include < windows.h >
#include < stdio.h >
#include < tchar.h >
#include "CP210xRuntimeDLL.h"

int execute_command( TCHAR cmd, LPBYTE data, TCHAR* port);

int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR   portName[20];
    int     res;
    TCHAR   cmd;
    TCHAR*  pos;
    BYTE    result, outdata;

    if( argc < 3 ) {
        printf_s("CP2103GPIO COM1 r\nCP2103GPIO COM1 w 1000\n");
        return( 0 );
    }
    swprintf_s( portName, 20, L"\\\\.\\%c%c%c%c",
                    argv[1][0],argv[1][1],argv[1][2],argv[1][3]);
    cmd = *argv[2];
    switch( toupper( cmd )) {
        case 'R':
            res = execute_command( cmd, &result, portName );
            if( res == CP210x_SUCCESS ) {
                printf_s( "%x\n", result );
            }
            break;
        case 'W':
            pos = argv[3];
            outdata = 0;
            if( pos[0] == '1' ) outdata |= 0x08;
            if( pos[1] == '1' ) outdata |= 0x04;
            if( pos[2] == '1' ) outdata |= 0x02;
            if( pos[3] == '1' ) outdata |= 0x01;
            res = execute_command( cmd, &outdata, portName );
            break;
        default:
            printf_s( "CP2103GPIO COM1 r\nCP2103GPIO COM1 w 1000\n" );
            break;
    }
    return( res );
}

int execute_command( TCHAR cmd, LPBYTE data, TCHAR* port)
{
    HANDLE  hc;
    int     res;
    BYTE    readData;

    hc = CreateFile(    port,
                        GENERIC_READ | GENERIC_WRITE,
                        0,
                        NULL,
                        OPEN_EXISTING,
                        FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
                        NULL );
    if( hc == INVALID_HANDLE_VALUE ) {
        wprintf_s( L"Open Error:%s\n", port );
        res = 11;
    } else {
        switch( toupper( cmd )) {
            case 'R':
                res = CP210xRT_ReadLatch( hc, &readData );
                if( res == CP210x_SUCCESS ) {
                    *data = readData;
                    res = 0;
                } else {
                    printf_s( "Error %d\n", res );
                    res = 12;
                }
              break;
            case 'W':
                res = CP210xRT_WriteLatch( hc, 0x0f, *data );
                if( res == CP210x_SUCCESS ) {
                    res = 0;
                } else {
                    printf_s("Data %x\n",*data );
                    printf_s("Error %x\n", res );
                    res = 13;
                }
                break;
            default:
                res = 15;
                break;
        }
        CloseHandle( hc );
    }
    return( res );
}
4.使い方。(以下、対象ポートをCOM3とする)
GPIOの出力状態を読む。
CP2103GPIO.exe com3 r
GPIOの出力を変更する。(例:ビット3とビット2を1に、ビット1とビット0を0にする)
CP2103GPIO.exe com3 w 1100
これをバッチファイルなどで利用する。
投稿者 やんもす : 23:56 | コメント (0)

便利ボード

20070526_benrie.jpg便利ボードがほぼ完成した。今回はハードウェアよりソフトウェアにこだわってみた。リアルタイム風?マルチタスクの小規模なOSを作ってからその上で動くLCDライブラリとキー入力ライブラリ、A/D変換ライブラリを作り、それらを利用したメインルーチンを動かしている。キー入力があると左の画面に表示する。A/D変換値は0.5s周期で右側に表示する。じつは無駄にディスパッチが激しいけど趣味だからいいのだ。
電源はUSBのバスパワーにしてしまった。あまり良くないよな?と思いつつ。

投稿者 やんもす : 23:37 | コメント (0)

2007年05月07日

ベンチマークテスト

久々のベンチマークテスト。
No1.メインマシン Athlon64 X2 3800
 SUPERπ104万桁: 43秒(Core 43℃)
 Crystalmark: 89271
20070507_superpi.jpg
No2.サブマシン VIA EDEN Samuel2
 SUPERπ104万桁: 22分17秒
 遅すぎ...

投稿者 やんもす : 22:53 | コメント (0)

2007年05月05日

ジャガイモ ほうれん草 玉葱 大根 ニンニク を収穫

ジャガイモ、ほうれん草、玉葱、大根、ニンニクを収穫した。ほうれん草はインスタントラーメンに入れてみた。とりたては柔らかくておいしい。
20070505_shukaku.jpg

投稿者 やんもす : 22:21 | コメント (2)
コメント: ken : 2007年05月12日 23:30

きっと、スーパーとかで売ってるものよりずっと美味しいのでしょうね。スーパーの野菜は製品という気がする。重労働なんだろうけど、ちょっとうらやましいです。

コメント: やんもす : 2007年05月13日 20:08

ほうれん草と大根はうまくできました。
でも、ジャガイモはいまいちで、スーパーの方がおいしいです。
ほうれん草は一度にたくさん採れてしまい毎日食べています。うさぎみたい。

2007年05月04日

eclipse+gccでH8のコードをビルド

JAVAのIDEで有名なeclipse
eclipse上ではWideStudioを使って小物を作ったことがある。
最近は組み込みマイコンでも利用する方がいるようだ。
下記サイトを参考に環境を構築してみた。
http://hp.vector.co.jp/authors/VA022386/
http://www.takamisawa.org/gcc/development.html
http://www.kikaiken.org/lib/junk/h8dev-doc-linux/index.html

使用したバージョンは次の通り
cygwin1.dll-1.5.24  :WindowsでGNUツールを使う
eclipse-SDK-3.2-win32  :エクリプス本体
NLpack1-eclipse-SDK-3.2-win32  :エクリプスの日本語化
CDT-3.1.0  :エクリプスでC/C++を使うプラグイン
binutils-2.15  :GNUツール
gcc-3.4.3  :コンパイラ
newlib-1.13.0  :小型のCライブラリ

設定をメモ。
1.エクリプスのPATH設定
 プロジェクト>プロパティー>C/C++MakeProject>Environment で環境変数に下記を追加。
 Variable: PATH
 Value:  c:\cygwin\bin;c:\cygwin\usr\local\h8\bin
 注釈: cygwinのコマンドとH8用gccのコマンドへパスを通す。

2.エクリプスのスキャナの設定
 プロジェクト>プロパティー>C/C++MakeProject>DiscoveryOptionの
 Enable generate scanner info command にチェックを入れて
 h8300h-hms-gcc と入力
 注釈: 検索基準をgccでなくh8300h-hms-gccに変更する。

3.スタートアップルーチン
 対象をH8/Tinyシリーズとする場合はH8/300Hノーマルモードなので
.h8300hn
 を冒頭に付ける。
 スタックポインタの設定は16ビットアドレスなので、
mov.w #_stack, sp
 となる。

4.LDスクリプト
 こちらも対象をH8/Tinyシリーズとする場合はH8/300Hノーマルモードなので
OUTPUT_ARCH( "h8300hn" )
 とした。

5.試しにビルド
対象CPU: H8/3664F(H8 Tinyシリーズ)
makefileは下記
------------------------------------
# makefile H8 300H tiny

NM = iotester
SRC = start.S os.c timer.c lcds.c key16.c init.c main.c
OBJS = start.o os.o timer.o lcds.o key16.o init.o main.o
LDSCRIPT = H8_3664F.x

CC = /usr/local/h8/bin/h8300-hms-gcc.exe
OBJCOPY = /usr/local/h8/bin/h8300-hms-objcopy.exe

MAP = $(NM).map
CFLAGS = -mh -mn -O2 -Wall
LDFLAGS = -nostartfiles -mrelax -T$(LDSCRIPT) -Wl,-Map,$(MAP)

all : $(NM)

$(NM) : $(SRC)
$(CC) -o $(NM).coff $(CFLAGS) $(LDFLAGS) $(SRC)
$(OBJCOPY) -Osrec $(NM).coff $(NM).mot

clean :
rm -f $(NM).mot $(OBJS)
------------------------------------
コードはできたので実機で試そう。
ハードウェア作ってないな。
つづく...。

投稿者 やんもす : 12:55 | コメント (2)
コメント: やんもす : 2007年05月05日 22:05

gccはVer 3.3からH8/300Hのノーマルモードに対応したようだ。
試しにアドバンスモードとノーマルモードのサンプルを作りビルドした。
バイナリサイズを比較すると、

H8300h(advance mode): 0000-11AE
H8300hn(normal mode): 0000-0DD2

結果22%小さくなっている。

コメント: やんもす : 2007年05月06日 00:20

次にルネサス純正のコンパイラ(HEW)を使用してみる。
-cpuオプションを変更してビルド(最適化オプションはSPEED)

300HA:24(advance mode 24bit address): 0000-0FC3
300HA:20(advance mode 20bit address): 0000-0FC3
300HN(normal mode): 0000-0CE8

いずれもgccのコードより小さい。さすが純正品といったところか。
コードサイズが64kByteまでなならHEWの評価版が使用できる。tinyを使うときはHEWにするかな。

2007年05月03日

大根と玉葱とほうれん草を収穫

20070503_shukaku.jpgここのところ植え付け作業が多かったが、それではつまらないので少しだけ収穫。大根はまだ小振りだな。玉葱はしっかりしたものができた。ほうれん草はまだ小さいけど葉が柔らかそうだ。こちらの方言だと、「みるい」かな。

投稿者 やんもす : 19:51 | コメント (0)

エンドウ豆の収穫

カラスの被害で少なくなったエンドウ豆を収穫した。膨らんでいるサヤを選んでむしり取る。開けると左右のサヤに互い違いに豆が付いている。不思議だ。けっこう取れたので明日は豆ご飯だ。20070503_endoumame.jpg

投稿者 やんもす : 19:46 | コメント (0)

便利ボード

20070503_benrie.jpg連休を使って久しぶりに電子工作をしている。秋月電子のH8/3664汎用ボードとキャラクタ表示の液晶、それにUSBシリアル変換ICのCP2103を組み合わせて何か便利な小物を作るのだ。何か便利?って目的が適当だが、とりあえずCP2103のシリアル通信とGPIOを使うのが目標。GPIOでブートモードと通常起動を切り替えられるか?まずは部品配置だけ決めた。

投稿者 やんもす : 15:08 | コメント (0)

2007年05月01日

生姜の植え付け

20070501_shouga.jpg種生姜は5cmくらいの大きさに切って、切り口を3日ほど天日で乾燥させた。
植え付けは、まず桑幅で土を掘り起こす。底へ堆肥を5~10cmくらい敷き詰めて、その上に土を5cmくらいのせる。種生姜を20cm間隔で芽を上にして置く。最後に土を5cmかけて完了。けっこう適当にやってしまったので大丈夫か心配だ。

投稿者 やんもす : 19:26 | コメント (0)