Revisão | fe4e796efb65394b2bae868e33c8d1cbbe7ae2c9 (tree) |
---|---|
Hora | 2011-04-30 21:31:22 |
Autor | Yoshinori Sato <ysato@user...> |
Commiter | Yoshinori Sato |
some cleanup
@@ -1 +1,33 @@ | ||
1 | -h8flush - H8/300 Internal flush memory writer. | |
1 | +Renesas CPU on-chip flash memory writer | |
2 | + | |
3 | +1. Requirement | |
4 | +- Standard POSIX library | |
5 | +- libusb | |
6 | + | |
7 | +2. Build and Install | |
8 | +please run "make". | |
9 | + | |
10 | +3. Usage | |
11 | +h8flash [-p port] [-f freq] [-b] [-l] [-V] filename | |
12 | +-p | |
13 | + commnunication port setting. | |
14 | + 'usb' is using usb. others using serial port. | |
15 | + | |
16 | +-f | |
17 | + CPU clock frequency setting | |
18 | + This is external clock frequency (MHz) | |
19 | + | |
20 | +-b | |
21 | + force binary writing | |
22 | + | |
23 | +-l | |
24 | + show device configuration list | |
25 | + | |
26 | +-V | |
27 | + verbose mode | |
28 | + | |
29 | +filename | |
30 | + S-Record file or binary image. | |
31 | + | |
32 | +4. Licenses | |
33 | +This program license is GPL v3 or later. |
@@ -1,55 +0,0 @@ | ||
1 | -■ h8flash - 20050203 | |
2 | - | |
3 | -○概要 | |
4 | -Renesas single chip CPU用のフラッシュ書き込みユーティリティです。 | |
5 | -プログラム内蔵型であればある程度対応できると思いますが、H8/3069以外で確認していないので、 | |
6 | -この名前にしてあります。 | |
7 | - | |
8 | -○動作環境 | |
9 | -linux-2.4.28 + glibc-2.3.2な環境で開発しています。 | |
10 | -特に変わった事はやっていないので、termiosが使えればどこでも動くはず。 | |
11 | - | |
12 | -○コンパイル・インストール | |
13 | -configureは無いので、そのままmake出来ます。 | |
14 | -h8flash.hにいくつか設定できる部分があるので、必要な場合は変更してください。 | |
15 | -出来上がった実行ファイルを適当なディレクトリに入れてください。 | |
16 | - | |
17 | -○使用法 | |
18 | -ターゲットボードを書き込み可能な状態で起動してから、このプログラムを実行してください。 | |
19 | -起動時の引数は次のようになります。必須の物は、指定しないとエラーになります。 | |
20 | - | |
21 | -$ h8flash -f clock freq [-p serial device] [--userboot] filename | |
22 | --f (必須)CPUクロックをMHz単位で指定。小数点以下2桁まで受け付けます。 | |
23 | --p (任意)使用するシリアルポートを指定します。指定しない場合は /dev/ttyS0 になります。 | |
24 | ---userboot (任意)指定した場合、ユーザーブートマットへ書き込みます。 | |
25 | -filename 書き込むファイル名です。Motorola-Sとraw binaryを自動判別して書き込むことが出来ます。 | |
26 | - | |
27 | -○注意事項 | |
28 | -限界まで通信速度を上げるので、安定した通信の出来る環境が必要です。 | |
29 | - | |
30 | -○カスタマイズ | |
31 | -h8flash.hの設定可能な項目は以下の物があります。 | |
32 | -・DEFAULT_SERIAL | |
33 | --pを指定しなかった場合に使用するシリアルポートです。 | |
34 | - | |
35 | -・SELDEV | |
36 | -・SELCLK | |
37 | -・SELAREA | |
38 | -デバイス種別、クロックモード、書き込みエリアを任意に設定できます。 | |
39 | -今のところCPU側が対応していないので、変更してもエラーになります。 | |
40 | - | |
41 | -・LOCKDIR | |
42 | -シリアルポートのロックファイルを作るディレクトリを指定します。 | |
43 | - | |
44 | -○ライセンス | |
45 | -GPL v2以上です。 | |
46 | - | |
47 | -○謝辞 | |
48 | -通信の謎な仕様はh8writeを参考にしました。作者の三岩氏に感謝します。 | |
49 | - | |
50 | -○履歴 | |
51 | -2005/04/18 誤差計算修正。コードの整理。 | |
52 | -2005/02/03 シリアルロック追加、いくつかのバグを修正。 | |
53 | -2005/02/02 初期リリース | |
54 | - | |
55 | -Yoshinori Sato <ysato@users.sourceforge.jp> |
@@ -35,7 +35,7 @@ const static struct option long_options[] = { | ||
35 | 35 | |
36 | 36 | static void usage(void) |
37 | 37 | { |
38 | - puts(PROGNAME " [-p serial port][-f input clock frequency][-b][--userboot][-l] filename"); | |
38 | + puts(PROGNAME " [-p port][-f input clock frequency][-b][--userboot][-l][-V] filename"); | |
39 | 39 | } |
40 | 40 | |
41 | 41 | /* read raw binary */ |
@@ -78,7 +78,7 @@ static int setbaud(int bitrate) | ||
78 | 78 | return 1; |
79 | 79 | } |
80 | 80 | |
81 | -/* connection target CPU */ | |
81 | +/* connect to target CPU */ | |
82 | 82 | static int connect_target(void) |
83 | 83 | { |
84 | 84 | int try1; |
@@ -1,3 +1,13 @@ | ||
1 | +/* | |
2 | + * Renesas CPU On-chip Flash memory writer | |
3 | + * USB I/O | |
4 | + * | |
5 | + * Yoshinori Sato <ysato@users.sourceforge.jp> | |
6 | + * | |
7 | + * This file is subject to the terms and conditions of the GNU Lesser | |
8 | + * General Public License version 2.1 (or later). | |
9 | + */ | |
10 | + | |
1 | 11 | #include <usb.h> |
2 | 12 | #include <stdio.h> |
3 | 13 | #include "h8flash.h" |
@@ -6,18 +16,26 @@ | ||
6 | 16 | |
7 | 17 | static struct usb_dev_handle *handle; |
8 | 18 | |
9 | -static int usb_send_data(const unsigned char *buf, int len) | |
19 | +/* | |
20 | +EP1: bulk out | |
21 | +EP2: bulk in | |
22 | +*/ | |
23 | + | |
24 | +/* send byte stream */ | |
25 | +static int send_data(const unsigned char *buf, int len) | |
10 | 26 | { |
11 | 27 | return usb_bulk_write(handle, 0x01, (const char *)buf, len, USB_TIMEOUT); |
12 | 28 | } |
13 | 29 | |
14 | -int usb_read_byte(unsigned char *data) | |
30 | +/* receive 1byte */ | |
31 | +static int read_byte(unsigned char *data) | |
15 | 32 | { |
16 | 33 | static unsigned char buf[64]; |
17 | 34 | static unsigned char *rp; |
18 | 35 | static int count = 0; |
19 | 36 | |
20 | 37 | if (count == 0) { |
38 | + /* refilling */ | |
21 | 39 | int r = usb_bulk_read(handle, 0x82, (char *)buf, 64, USB_TIMEOUT); |
22 | 40 | if (r < 0) |
23 | 41 | return r; |
@@ -29,7 +47,7 @@ int usb_read_byte(unsigned char *data) | ||
29 | 47 | return 1; |
30 | 48 | } |
31 | 49 | |
32 | -/* connection target CPU */ | |
50 | +/* connect to target CPU */ | |
33 | 51 | static int connect_target(void) |
34 | 52 | { |
35 | 53 | unsigned char req = 0x55; |
@@ -57,6 +75,7 @@ static struct port_t usb_port = { | ||
57 | 75 | .close = port_close, |
58 | 76 | }; |
59 | 77 | |
78 | +/* USB port open */ | |
60 | 79 | struct port_t *open_usb(unsigned short vid, unsigned short pid) |
61 | 80 | { |
62 | 81 | struct usb_bus *busses; |
@@ -73,10 +92,9 @@ struct port_t *open_usb(unsigned short vid, unsigned short pid) | ||
73 | 92 | for (dev = bus->devices; dev; dev = dev->next) { |
74 | 93 | if ((dev->descriptor.idVendor == vid) && |
75 | 94 | (dev->descriptor.idProduct == pid)) |
76 | - goto found; | |
95 | + break; | |
77 | 96 | } |
78 | 97 | } |
79 | -found: | |
80 | 98 | if (dev == NULL) |
81 | 99 | return NULL; |
82 | 100 | handle = usb_open(dev); |