フォト
無料ブログはココログ

CPUボード

2018年11月18日 (日)

uPD78310ワンボードマイコン

 ヤフオクに「ワンボードマイコン(16bit uPD78310) 600円」が出ていた。 uPD78310ってなに?だけど、残り時間が無かったのでとりあえず落札しておいた。

 uPD78310を調べてみたら NECの78K/IIIシリーズらしいことが分かった。

Upd78310g

 78Kシリーズの系譜は、「【マイコンデータ室】NECエレクトロニクスの系譜(1)「8ビット~16ビット」《修正あり》」日経XTECHにある。

 簡単に言うと、祖先はZ80互換のuPD780で、それをワンチップ化したのが78K/0シリーズ、78K/I、78K/IIと8bitで高機能化し、78K/IIIで16bitになって、78K/IVは16bitのミドルレンジで最近まで生き残っていたらしい。

 今は78K0Rをコアとして78KとR8Cを統合してRL78Kシリーズになっている。

 落札したボードは、uPD78310Gを使ったシンプルなボードで、F/W用のEPROMが載るようになっている。

Kpc4494v0

 開発環境を探すと、なかなか見つからない。
 アーキテクチャはZ80を踏襲しているのだが、さすがにハンドアセンブルは面倒だ。 
ホビー用ではなかったようだから、freeのコンパイラが無い。

 78Kは78K/IVシリーズが最後まで残って、そして78K/IVは78K/IIIの上位互換らしい。ならば78K/IVの開発環境が使えるのではないか?  ひょっとしたらRenesasのサイトにあるかもと思い、探してみると78K/IVの開発環境があった。

 ところが、日本のサイトはリンク切れになっていてDLできない。 

 USのサイトからCC78K4がDLできた。アセンブラソースを出力して修正して、78K/III用のアセンブラでアセンブルすれば、そんなに大変ではないだろう。

 ところが、78K/IVのCコンパイラCC78K4のパッケージは古い。

 64bit版Windowsではインストーラが動作しない。 しかし、なんとかインストーラは動かすことができた。

 ところが、インストールにはプロダクトIDが必要らしい。 orz

 昔は、評価版とか機能制限版はなかったからなあ。

 困った、コンパイラが無い。


最近の投稿】【最近のCPUボード】【2017の投稿】 【2016の投稿】 【2015の投稿

2018年10月29日 (月)

コアメモリ <もう一つ入手した>

 ヤフオクでコアメモリを入手した。

 既に1つ入手しているのだが、また出品されたので落札してみた。ひと頃高騰していたけれど、最近は3000円くらいで即決で落札できる。

Magneticcorememory

 今回入手したコアメモリ↑は大容量なんと4,096bit(64x64)だった。

Mcmsence_inhibit

センス線(赤・白、角から出ている線)が2系統あるので、2,048bit×2のようだ。

青・白(上に伸びている線)はインヒビット線。半分づつインヒビットできる。

Magnetic Core

↑斜めの線はセンス線。 横に走っている1本はアドレス線。 縦に走っている2本はアドレス線とインヒビット線。


 


最近の投稿】【最近のCPUボード】【2017の投稿】 【2016の投稿】 【2015の投稿

2018年9月21日 (金)

Bus pirate(4) <スクリプトを動かしてみる>

相も変わらず Bus Pirateで遊んでいる。

 BusPirateには組み込みscript(BASICのサブセット)がある。
terminalインタフェースではデバイスからのレスポンスを待つのは難しいが、scriptを使うとできるようになる。

 以前に買ったLED&KEYを制御してみた。

 このモジュールのLEDコントローラにはTM1638が使われている。インタフェースは、クロック(CLK)に同期したシリアル通信で、データ(DIO)は双方向だ。デバイの選択はSTBをLにする。

 英語版のデータシートは(https://www.mikrocontroller.net/attachment/332035/TM1638_V1.3_EN.pdf)にある。

 BusPirateの raw 2-wireで制御してみる。

 接続はこんな感じ↓

BusPirateLED&KEY
MOSI --- DIO
CLK --- CLK
AUX --- STB
5V -+- VCC
VPU -+ 
GND --- GND

 ビットオーダーには注意が必要だ。SPIやI2CはMSBから送るMSB-firstだがTM1368はLSBから送るLSB-firstだから、"L"コマンドでビットオーダーを切り替えなくてはならない。

 ↓実行結果

HiZ>m 6 1 1		← raw 2-wire
R2W (spd hiz)=( 0 1 )
Ready
2WIRE>WPLc		← PowerON,PullUP,LSBfirst,ctrlAUX
Power supplies ON
Pull-up resistors ON
LSB set: LEAST sig bit first	← "L"command
a/A/@ controls AUX pin		← "c"command
2WIRE>v
Pinstates:
1.(BR)  2.(RD)  3.(OR)  4.(YW)  5.(GN)  6.(BL)  7.(PU)  8.(GR)  9.(WT)  0.(Blk) 
GND     3.3V    5.0V    ADC     VPU     AUX     SCL     SDA     -       -
P       P       P       I       I       I       O       I       I       I
GND     3.29V   5.02V   0.00V   5.02V   H       L       H       H       H
2WIRE>a 0x40 A		← DataCommand: WriteRegister,AutoIncremet
AUX LOW
WRITE: 0x40
AUX HIGH
2WIRE>a 0xC0		← AUX←L、AddressCommand: 00h
AUX LOW
WRITE: 0xC0
2WIRE>  0x76,0x00, 0x79,0x00, 0x38,0x00, 0x38,0x00	← "HELL" 
WRITE: 0x76
WRITE: 0x00
WRITE: 0x79
WRITE: 0x00
WRITE: 0x38
WRITE: 0x00
WRITE: 0x38
WRITE: 0x00
2WIRE>  0x3F,0x00, 0x40,0x01, 0x40,0x01, 0x40,0x01	← "O---"  
WRITE: 0x3F
WRITE: 0x00
WRITE: 0x40
WRITE: 0x01
WRITE: 0x40
WRITE: 0x01
WRITE: 0x40
WRITE: 0x01
2WIRE>A 		← AUX←H
AUX HIGH
2WIRE>a 0x8A A		← DisplayControl: DispON
AUX LOW
WRITE: 0x8A
AUX HIGH
2WIRE>

BP-HELLO

 表示を動かそうとするとコマンドを何回も入力しなければならないので、scriptで動かしてみる。

 BusPireteのscriptはBASICのサブセットなので制限がある。

  • 数値は10進数だけ。16進数は使えない
     "="コマンドで10進、16進、2進の変換ができるので、10進数にする。
  • 変数への代入はLETを使う
     ×A=10、〇LET A=10
  • "DATA"、"READ"コマンドはあるけど"RESTOR"コマンドが無い
  • AUXピンが制御できない
     "AUXPIN 0"でAUXピンが制御できるはずだが、CSしか制御できない(BUG?)
  • "SEND"コマンドのビットオーダーは常にMSB-First
     ターミナルコマンド"L"を引き継がない。

 AUXピンが制御できないのは致命的だ。 仕方がないので、ターミナルコマンドでDataCommand(40h)、DispContorl(88h)を送っておいて、表示データをscriptで送ってみる。

 ↓ターミナルで送るコマンド

m 6 1 1		← raw 2-wire
WPLc		← PowerON,PullUP,LSBfirst,ctrlAUX
a 0x40 A	← DataCommand: WriteRegister,AutoIncremet
a 0xC0		← AUX←L、 AddressCommand: 00h 

 scriptを例えば"hello.bas"というファイル名で保存しておいて、ターミナル・ソフトのファイル送信機能でBusPirateに送ると簡単。 BusPirateが処理する時間を確保するために行当たり500msの時間待ちしている。

 scriptはこんな感じ↓

hello.bas
10 FOR I=1 TO 100
20   GOSUB 1000
30   DELAY 100
40 NEXT I
50 END
999  REM Disp HELLO
1000 IF I<50 THEN SEND 0
1010 IF I<50 THEN SEND 128   
1020 SEND 110
1030 SEND 0
1040 SEND 158
1050 SEND 0
1060 SEND 28
1070 SEND 0
1080 SEND 28
1090 SEND 0
1100 SEND 252
1110 SEND 0
1120 SEND 0
1130 SEND 128
1140 SEND 0
1150 SEND 128
1160 IF I<50 THEN SEND 0
1170 IF I<50 THEN SEND 128
1180 RETURN

↑SENDコマンドで送る数値はビットオーダーを変えてある。 例えば1020行の SEND 110は、表示したいパターンは01110110(76h)なので、01110110b→01101110b→6Eh→110を送る。

 scriptでLSBから1bitづつ送るようにすれば、いちいち変えなくてよいのだがどちらも面倒。

↓動いているところ。

Bphello_1ダウンロード BP-HELLO.mp4 (1110.6K)

↑途中でメッセージが移動する方向が変わる。

 待てよ、AUXではなくCSを使えばいいじゃないかと気が付いた。

###

この記事に書いた制限(BUG?)は↓のFirmware固有のものかもしれない。

HiZ>i
Bus Pirate v3b
Firmware v5.10 (r559)  Bootloader v4.4
DEVID:0x0447 REVID:0x3046 (24FJ64GA002 B8)
http://dangerousprototypes.com
CFG1:0xF9DF CFG2:0x3F7F

最新のFirmwareにアップデートしてみるか



最近の投稿】【最近のCPUボード】【2017の投稿】 【2016の投稿】 【2015の投稿

2018年9月17日 (月)

Bus pirate(3) <SDカードをパスワード・ロックしてみる>

  Bus pirateでSDカードが読めたので、SDカードをパスワード・ロックしてみる。
実験に使ったSDカードはSanDiskの8GB SDHC。 

Sandisk_8g_sdhc

Buspirate36_sd  

【初期化】
 初期化のコマンドは、CMD0→CMD8→ACMD41(CMD55、CMD41)。 このカードはACD41(CMD55+CMD41)を2回送ると初期化できるようだ。 2回で初期化が完了しない場合はR1レスポンスが00hになるまでACMD41を送る。

SDHC_InitCmd.txt
m 5 1 1 2 1 2 2
Wv

]r:10[0x40 0x00 0x00 0x00 0x00 0x95 r:8]
[0x48 0x00 0x00 0x01 0xAA 0x86 0x87 r:8]
[0x77 0x00 0x00 0x00 0x01 0xff r:8]
[0x69 0x40 0x00 0x00 0x01 0xff r:8]
[0x77 0x00 0x00 0x00 0x01 0xff r:8]
[0x69 0x40 0x00 0x00 0x01 0xff r:8]
[0x4D 0x00 0x00 0x00 0x00 0xff r:8]

↑このようなファイルを作っておいてターミナルから送信すると入力が楽。 Bus pirateでの処理時間が必要なので、1行送信したら100ms~1000ms待つ。

↓Teratermの例
Terminaldelay

【パスワードロック】
 パスワードロックに使うコマンドはCMD16, CMD42, CMD13。

SD HostdirSD Card
SC(Lo) Select
CMD16(0x00 0x00 0x02 0x00 0xFF) BLOCK_LEN=512
R1 response 0x00=NoError
SC(Hi)
SC(Lo) Select
CMD42(0x00 0x00 0x00 0x00 0xFF)
R1 response 0x00=NoError
0xFE LockCardStructure 0xFFx(512-PWD_LEN) 0xFF 0xFF Data Packet
Data response R1+busy, busy=0x00
SC(Hi)
SC(Lo) Select
CMD13(0x00 0x00 0x02 0x00 0xFF)
Data response R2(R1+Status)
SC(Hi)

【CMD42】 
 CMD42のデータパケットで送るデータ

Lock Card Data Structure
Byte# Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
0 Reserved
(shall be set to 0)
ERASE LOCK_UNLOCK CLR_PWD SET_PWD
1 PWDS_LEN
2 password data
・・・
PWDS_LEN+1
  • Byte#0:
    • パスワード・設定(0x01)
      パスワード長とパスワード・データが設定される。
      この設定だけではまだロックされていない。電源をOFFにするか、LOCK_UNLOCK(0x04)でロックする。
       
    • パスワード・変更(0x01)
      既に設定されているパスワードを変更する場合は、パスワード長(PWDS_LEN)に新しいパスワード長を加算した値をセットし、パスワード・データには現在設定されているパスワードに続けて変更するパスワードを設定する。
       
    • パスワード・クリア(0x02)
      パスワード長とパスワード・データをクリアする。ロックは解除される。
       
    •  パスワード・ロック(0x04)
      SDカードがロックされデータにアクセスできなくなる。
       
    • パスワード・ロック解除(0x00)
      パスワード・ロックが解除されデータにアクセスできるようになる。
      電源を再投入するとロック状態に戻る。
       
    • 消去(0x08)
      パスワードが分からない場合でも設定されているパスワードを消去することができる。 ただし、データもすべて消去される。
       
  • Byte#1 : パスワード長。
  • Byte#2~: パスワードデータを設定する。 バイナリデータも設定できる
    パスワードは16byte以内。

【パスワード設定】

SPI>[0x50 0x00 0x00 0x02 0x00 0xFF r:8] ←CMD16:SET_BLOCK_LEN len=512
/CS ENABLED
WRITE: 0x50
WRITE: 0x00
WRITE: 0x00
WRITE: 0x02
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
/CS DISABLED

SPI>[0x6A 0x00 0x00 0x00 0x00 0xFF r:8 ←CMD42:LOCK_UNLOCK
/CS ENABLED
WRITE: 0x6A
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

SPI>0xFE 0x01 6 "abc123" 0xFF:506 0xFF 0xFF r:24] ←SET_PWD
WRITE: 0xFE   ←Data token
WRITE: 0x01   ←PWD_SET
WRITE: 0x06   ←PWDS_LEN
WRITE: "abc123" ←passowrd data
WRITE: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
       0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
                            ( 506=512-6のFFh
               )
       0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
       0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
WRITE: 0xFF   ←CRC(dummy)
WRITE: 0xFF   ←CRC(dummy)
READ: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x0F 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
/CS DISABLED

電源OFF(カードを抜く)

SPI>[0x4d 0x00 0x00 0x00 0x00 0xff r:8]    ←CMD13 SEND_STATUS
/CS ENABLED
WRITE: 0x4D
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0x00 0x01 0xFF 0xFF 0xFF 0xFF 0xFF ←R2:0x01="Card is locked"
/CS DISABLED

PCに認識させてみると。

Sdcarddiskmgr_setpwd

 このPCはSDカードスロットがあって内部的にはUSBに繋がっているようだ。 パスワード・ロックされているSDカードは「メディアなし」と表示されている。

【パスワード・ロック解除】

SPI>[0x50 0x00 0x00 0x02 0x00 0xFF r:8]   ←CMD16 SET_BLOCK_LEN
/CS ENABLED
WRITE: 0x50
WRITE: 0x00
WRITE: 0x00
WRITE: 0x02
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
/CS DISABLED

SPI>[0x6A 0x00 0x00 0x00 0x00 0xFF r:8   ←CMD42 LOCK_UNLOCK
/CS ENABLED
WRITE: 0x6A
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

SPI>0xFE 0x00 6 "abc123" 0xFF:506 0xFF 0xFF r:24] ←UNLOCK 0x00
WRITE: 0xFE
WRITE: 0x00
WRITE: 0x06
WRITE: "abc123" ←passowrd data
WRITE: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
       0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
                            ( 506=512-6のFFh
               )
       0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
       0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
WRITE: 0xFF   ←CRC(dummy)
WRITE: 0xFF   ←CRC(dummy)
READ: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x0F 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
/CS DISABLED

SPI>[0x4d 0x00 0x00 0x00 0x00 0xff r:8]  ←CMD13 SEND_STATUS
/CS ENABLED
WRITE: 0x4D
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF ←R2 ロック解除
/CS DISABLE

 この状態で、データにアクセスできるようになる。 
パスワードは設定されているので、電源OFF(抜く)とパスワード・ロック状態になる。

【パスワード・クリア】

SPI>[0x4D 0x00 0x00 0x00 0x00 0xff r:8]  ←CMD13 SEND_STATUS
/CS ENABLED
WRITE: 0x4D
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0x00 0x01 0xFF 0xFF 0xFF 0xFF 0xFF ←R2:0x01=Card is locked
/CS DISABLED

SPI>[0x50 0x00 0x00 0x02 0x00 0xFF r:8]    ←CMD16:SET_BLOCK_LEN
/CS ENABLED
WRITE: 0x50
WRITE: 0x00
WRITE: 0x00
WRITE: 0x02
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
/CS DISABLED

SPI>[0x6A 0x00 0x00 0x00 0x00 0xFF r:8    ←CMD42:LOCK_UNLOCK
/CS ENABLED
WRITE: 0x6A
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

SPI>0xFE 0x02 6 "abc123" 0xFF:506 0xFF 0xFF r:24] ←0x02: CLR_PWD
WRITE: 0xFE
WRITE: 0x02
WRITE: 0x06
WRITE: "abc123" ←passowrd data
WRITE: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
       0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
                            ( 506=512-6のFFh
               )
       0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
       0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
WRITE: 0xFF   ←CRC(dummy)
WRITE: 0xFF   ←CRC(dummy)
READ: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x00 0x03 0xFF 0xFF
/CS DISABLED

SPI>[0x4D 0x00 0x00 0x00 0x00 0xFF r:8]   ←CMD13 SEND_STATUS
/CS ENABLED
WRITE: 0x4D
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF ←R2:ロック解除
/CS DISABLED

 ステータスを読むとロック解除になっている。 ロック解除(UNLOCK)と違うのはパスワードデータがクリアされているので電源をOFFにしてもロック解除されたままになる。
 PCに認識させてみると、

Sdcarddiskmgr_resetpwd1

 ちゃんと認識されている。 めでたしめでたし。

###

 ネットを探すと、AVRやPIC、Arduino、RaspberyPiで実装した例があるようだ。



最近の投稿】【最近のCPUボード】【2017の投稿】 【2016の投稿】 【2015の投稿

2018年9月11日 (火)

Bus pirate(2) <SDカードを読んでみる>

 Bus pirate(2018/9/3)で先割れスプーン的だと書いたけど、便利だったのでSPIモードでSDカードを読んでみた。 uSDカードアダプタはAmazonで買った安物。 3.3VのLDOとレベルシフタが載っている。

Buspirate36_sd  

 昔SDカード/MMCカードで遊んでいたころはまだSDHC規格は無かったので知識が古い。

 調べてみると、MMCカード規格を作っていたMultiMediaCard AssociationはJDECと合併したらしい。 最近MMCカードは見かけないけど組み込み業界では eMMCとしてチップが基板に張り付けてある。

 MMCカードの規格はRenesas(旧日立)の「マルチメディアカードユーザーズマニュアル(j603002_mmc.pdf)」があるのだが、Renesasのサイトでは見つからないようだ。 ネット上では奇特な人が保存してくれているようだ。

 ここを参考にBus pirateでSDカードのデータを読んでみた。

 SDカードはSanDiskの2G microSDcard。
Sandisk_2g_sdc

【初期化】
 CMD1で初期化してみた。 初期化手順は、

  1. SPIモードにする
  2. CMD0:GO_IDLE_STATE:(要CRC)
  3. CMD1:SEND_OP_COND R1レスポンスが00hになるまで
  4. CMD2:ALL_SEND_CID
  5. CMD3:ET_RELATIVE_ADDR

これはMMCの初期化方法。 ユーザマニュアルに説明がある。 今回は、CMD2,CMD3は省略して先頭セクタを読んでみる。

 SPIモードにするには、CSをHにしてダミークロックを74クロック以上発行する。 74クロックはキリが悪いので80クロックとする。 

 BusPirateでは、"]"←CS=H、r:10←10byte(80clock)、

 コマンドレスポンスの先頭ビットは0なので0xFF以外のデータを読み出すまで待つ。ところが、BusPireteでは待つことができないのでとりあえず8byte読む。 0xFFでないデータがコマンドレスポンスだ。 (scriptを使うと待つことができる。)

【セクタ読み出し】
 読みだし手順は、

  1. CMD16:SEND_BKICKLEN
  2. CMD17:READ_SINGLE_BLK

 まずCMD16でブロックサイズを指定する。次にCMD17を送ると、コマンドレスポンスに続いてデータを読み出すことができる。 読み出す回数はコマンドレスポンス:5byte、データトークン(0xFE):1byte、ブロックデータ:512byte、CRC:2byteで520byteを指定している。 

 6byte以内にデータトークン(0xFE)が読み出せないとすべてのデータが読めない。 そのときは読み取るデータを多くする。 (r:530とか)

HiZ>m 5 1 1 2 1 2 2  ←SPIモード
SPI (spd ckp ske smp csl hiz)=( 1 0 1 0 1 0 )
Ready
SPI>Wv         ←電源ON ピンステータス表示
Power supplies ON
Pinstates:
1.(BR)  2.(RD)  3.(OR)  4.(YW)  5.(GN)  6.(BL)  7.(PU)  8.(GR)  9.(WT)  0.(Blk)
GND     3.3V    5.0V    ADC     VPU     AUX     CLK     MOSI    CS      MISO
P       P       P       I       I       I       O       O       O       I
GND     3.29V   5.02V   0.00V   0.00V   H       L       H       H       L

SPI>]r:10                 ←SPImode
/CS DISABLED
READ: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

SPI>[0x40 0x00 0x00 0x00 0x00 0x95 r:8]   ←CMD0 GO_IDLE_STA
/CS ENABLED
WRITE: 0x40
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x95
READ: 0xFF 0x01 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF ←R1=0x01 "In Idle State"
/CS DISABLED

SPI>[0x41 0x00 0x00 0x00 0x00 0xff r:8]        ←CMD1 SEND_OP_COND 
/CS ENABLED
WRITE: 0x41
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0x01 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF ←R1=0x01 "In Idle State"
/CS DISABLED

SPI>[0x41 0x00 0x00 0x00 0x00 0xff r:8]    ←CMD1 SEND_OP_COND
/CS ENABLED
WRITE: 0x41
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF ←R1=0x00 成功
/CS DISABLED
SPI>[0x50 0x00 0x00 0x02 0x00 0xff r:8]    ←CMD16 SET_BLOCK_LEN
/CS ENABLED
WRITE: 0x50
WRITE: 0x00
WRITE: 0x00
WRITE: 0x02
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF ←R1 Response=0x00 成功

SPI>[0x51 0x00 0x00 0x00 0x00 0xff r:520]   ←CMD17 READ_SINGLE_BLOCK
/CS ENABLED
WRITE: 0x51
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0xFF 0x00 0xFF 0xFF 0xFE 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
                  (                        
                   )                       
      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x00 0x03 0x3D 0x00 0x06 0x3F 0xFF 0xD7 0xF9 0x00 0x00 0x00
      0x07 0x89 0x3C 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x55 0xAA
0x5D 0xE1
/CS DISABLED

 ↑先頭から3byte目がR1レスポンス(0x00)。続いてデータトークン(0xFE)、SDカードの先頭セクタ。パーティションテーブル(下線部分)と末尾に55h、AAhがある。 最後の2byteはCRC(0x5D,0xE1)。

【SDHCカード】
 SanDisk SDHC 8GBも読んでみる。

Sandisk_8g_sdhc

 このカードはCMD1で初期化する方法は使えない。 初期化手順は、SD AssociationからDLできる [Physical Layer Simplified Specification]に解説がある。

  1. SPIモードにする
  2. CMD0: GO_IDLE_STATE:(要CRC)
  3. CMD8: SEND_IF_COND:(要CRC)
  4. ACMD41:SD_APP_OP_COND (CMD55+CMD41) R1レスポンスが00hになるまで 
  5. CMD58: READ_OCR

CMD8のパラメータは、0x00、0x00、電圧、チェックパターン(レスポンスで同じ値が返る)。 電圧は3.3vで使うので0x01、チェックパターンは0xAAを使う。 なぜって、ネット上にCRC(0x87)を計算した人がいるから。 ここは決め打ちでよさそう。

 CMD58は省略。データ読み出しはCMD16とCMD17上の例と同じ。

HiZ>m 5 1 1 2 1 2 2
SPI (spd ckp ske smp csl hiz)=( 1 0 1 0 1 0 )
Ready

SPI>Wv
Power supplies ON
Pinstates:
1.(BR) 2.(RD) 3.(OR) 4.(YW) 5.(GN) 6.(BL) 7.(PU) 8.(GR) 9.(WT) 0.(Blk)
GND 3.3V 5.0V ADC VPU AUX CLK MOSI CS MISO
P P P I I I O O O I
GND 3.29V 5.02V 0.00V 0.00V H L H H L

SPI>]r:10                ←SPImode
/CS DISABLED READ: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

SPI>[0x40 0x00 0x00 0x00 0x00 0x95 r:8] ←CMD1 GO_IDLE_STATE
/CS DISABLED
READ: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
/CS ENABLED
WRITE: 0x40
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x95
READ: 0xFF 0x01 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

/CS DISABLED
SPI>[0x48 0x00 0x00 0x01 0xAA 0x87 r:8]  ←CMD8 SEND_IF_COND
/CS ENABLED
WRITE: 0x48
WRITE: 0x00
WRITE: 0x00
WRITE: 0x01
WRITE: 0xAA
WRITE: 0x86
WRITE: 0x87
READ: 0x01 0x00 0x00 0x01 0xAA 0xFF 0xFF 0xFF  ←R1:Idle R7:
/CS DISABLED

SPI>[0x77 0x00 0x00 0x00 0x01 0xff r:8]   ←CMD55 APP_CMD
/CS ENABLED
WRITE: 0x77
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x01
WRITE: 0xFF
READ: 0xFF 0x01 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
/CS DISABLED

SPI>[0x69 0x40 0x00 0x00 0x01 0xff r:8] ←CMD41 PP_SEND_OP_COND
/CS ENABLED
WRITE: 0x69
WRITE: 0x40
WRITE: 0x00
WRITE: 0x00
WRITE: 0x01
WRITE: 0xFF
READ: 0xFF 0x05 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
/CS DISABLED

SPI>[0x77 0x00 0x00 0x00 0x01 0xff r:8] ←CMD55 APP_CMD
/CS ENABLED
WRITE: 0x77
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x01
WRITE: 0xFF
READ: 0xFF 0x01 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
/CS DISABLED

SPI>[0x69 0x40 0x00 0x00 0x01 0xff r:8] ←CMD41 PP_SEND_OP_COND
/CS ENABLED
WRITE: 0x69
WRITE: 0x40
WRITE: 0x00
WRITE: 0x00
WRITE: 0x01
WRITE: 0xFF
READ: 0xFF 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
/CS DISABLED

SPI>[0x50 0x00 0x00 0x02 0x00 0xff r:8] ←CMD16 SET_BLOCK_LEN len=512byte
/CS ENABLED
WRITE: 0x50
WRITE: 0x00
WRITE: 0x00
WRITE: 0x02
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
/CS DISABLED

SPI>[0x51 0x00 0x00 0x00 0x00 0xff r:520] ←CMD17 READ_SINGLE_BLK
/CS ENABLED
WRITE: 0x51
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0x00
WRITE: 0xFF
READ: 0xFF 0xFF 0x00 0xFF 0xFF 0xFE 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
                  (                        
                   )                       
      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x00 0x82 0x03 0x00 0x0B 0x50 0xCA 0xC6 0x00 0x20 0x00 0x00
      0x00 0xC0 0xEC 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      0x00 0x00 0x00 0x00 0x55 0xAA
0x68 0xC0
/CS DISABLED

 CMD8は PhysicalSpec Ver2.0から使えるらしい。 CMD8→ACMD41→CMD1の順に初期化するとどのカードでも使える。

 昔AVRでSD/MMCにアクセスするプログラムを作ったときは、初期化で苦労した記憶がある。 いまほど情報もなかったし、Arduinoも無かったから。

 今時は情報も多いし、Bus pirateのようなツールで試すと、F/Wレベルでの試行錯誤を減らせる。

###

 SDカードのライセンスにまつわるエトセトラは。Chanさんやねむさいんの、

が参考になる。



最近の投稿】【最近のCPUボード】【2017の投稿】 【2016の投稿】 【2015の投稿

2018年9月 3日 (月)

Bus pirate <先割れスプーン的だが便利だ>

Bus pirate 3.6aをスイッチサイエンスで買った。

Buspirate36_2
↑(スイッチサイエンスの箱の上で撮った。宣伝ではありません)

Bus pirateDANGEROUSPROTOTYPESのオープンソースのユニバーサル・バスインタフェースで、スイッチサイエンスで売っているのはSpeed Studioが造っている。

今回買ったのはver3.6aだ。 実はver4.0が出ていて、マルツは4.0を売っているのだが、ちょっと急いでいたので即日発送のスイッチサイエンスで買った。 (実は、v4.0の部品も買ってあるのだが...)

 このボードを一言でいうと、1-wireやI2CやSPI、マイコン系の萬プロトコルの制御ができるツール。他に周波数測定やPWMが発生できる。

 わざわざこんな先割れスプーン的なツールを買わなくてもマイコンを使ったらできる。 Arduinoはライブラリが充実しているので簡単にできるのだが...

 Bus pirateはFT232の先にPIC24FJ64GA002が繋がっていて、レベルシフタでバスに繋がっている。

Buspirate36_1  

Ft232rl Pic24f

ターミナルソフトでつないでコマンドを入力して制御してみる。

"?"を入力するとコマンド一覧が表示される。
"i"を入力するとファームウェアの情報が表示される。

HiZ>?
General                                 Protocol interaction
---------------------------------------------------------------------------
?       This help                       (0)     List current macros
=X/|X   Converts X/reverse X            (x)     Macro x
~       Selftest                        [       Start
#       Reset                           ]       Stop
$       Jump to bootloader              {       Start with read
&/%     Delay 1 us/ms                   }       Stop
a/A/@   AUXPIN (low/HI/READ)            "abc"   Send string
b       Set baudrate                    123
c/C     AUX assignment (aux/CS)         0x123
d/D     Measure ADC (once/CONT.)        0b110   Send value
f       Measure frequency               r       Read
g/S     Generate PWM/Servo              /       CLK hi
h       Commandhistory                  \       CLK lo
i       Versioninfo/statusinfo          ^       CLK tick
l/L     Bitorder (msb/LSB)              -       DAT hi
m       Change mode                     _       DAT lo
o       Set output type                 .       DAT read
p/P     Pullup resistors (off/ON)       !       Bit read
s       Script engine                   :       Repeat e.g. r:10
v       Show volts/states               .       Bits to read/write e.g. 0x55.2
w/W     PSU (off/ON)            <x>/<x= >/<0>   Usermacro x/assign x/list all

HiZ>i
Bus Pirate v3b
Firmware v5.10 (r559)  Bootloader v4.4
DEVID:0x0447 REVID:0x3046 (24FJ64GA002 B8)
http://dangerousprototypes.com
HiZ>

ファームウェアはv5.10のようだ。 サポートページによると最新はv7.0公式はv6.3で、GitHubからDLするようだ。

とりあえず、I2CのEEPROM(24LC64)を読んでみた。
ここを参考にしましたというかそのまま試した。(https://gist.github.com/yoggy/2f2ffc198cc154539506b8755f42dce8)

Buspirate36_i2c

↑ICの足にクリップを直接つないだ。

メモ代わりに書いておく。

設定

HiZ>m ←モード設定
1. HiZ
2. 1-WIRE
3. UART
4. I2C
5. SPI
6. 2WIRE
7. 3WIRE
8. LCD
9. DIO
x. exit(without change)

(1)>4
Set speed:
1. ~5KHz
2. ~50KHz
3. ~100KHz
4. ~400KHz

(1)>4
Ready


I2C>W      ←W:電源ON
Power supplies ON 
I2C>P      ←P:PullUp ON
Pull-up resistors ON
I2C>v      ←v:ピンステータス表示
Pinstates:
1.(BR)  2.(RD)  3.(OR)  4.(YW)  5.(GN)  6.(BL)  7.(PU)  8.(GR)  9.(WT)  0.(Blk)
GND     3.3V    5.0V    ADC     VPU     AUX     SCL     SDA     -       -
P       P       P       I       I       I       I       I       I       I
GND     3.29V   5.02V   0.00V  5.03V   H       H       H       H       H

I2C>(0) ←マクロでアドレスを探す
0.Macro menu
1.7bit address search
2.I2C sniffer
I2C>(1)
Searching I2C address space. Found devices at:
0xA0(0x50 W) 0xA1(0x50 R)
I2C>

 VPU(#5)に5Vを供給しておくこと、ボードからもらうか#3に接続する。(上の画像では24LC64の#8ピンにオレンジ(5.0V)とグリーン(VPU)が繋がっている。)

 vコマンドでステータスを見ると、VPUが5.03Vになっている。

書き込み

I2C>[0xa0 0x00 0x00 0x00 0x11 0x22 0x33 0x44 0x55 0x66 0x77]  
I2C START BIT   ↑アドレス0x00 から8byte書く
WRITE: 0xA0 ACK
WRITE: 0x00 ACK
WRITE: 0x00 ACK
WRITE: 0x00 ACK
WRITE: 0x11 ACK
WRITE: 0x22 ACK
WRITE: 0x33 ACK
WRITE: 0x44 ACK
WRITE: 0x55 ACK
WRITE: 0x66 ACK
WRITE: 0x77 ACK
I2C STOP BIT
I2C>

 デバイスのアドレス(1byte目)は、マクロで探したアドレスを使う。

読み出し

I2C>[0xa0 0x00 0x00] ←アドレスを0x00に
I2C START BIT
WRITE: 0xA0 ACK
WRITE: 0x00 ACK
WRITE: 0x00 ACK
I2C STOP BIT
I2C>[0xa1 rrrrrrrr] ←8byte読む
I2C START BIT
WRITE: 0xA1 ACK
READ: 0x00
READ:  ACK 0x11
READ:  ACK 0x22
READ:  ACK 0x33
READ:  ACK 0x44
READ:  ACK 0x55
READ:  ACK 0x66
READ:  ACK 0x77
NACK
I2C STOP BIT
I2C>                                                             

コマンドは続けることができるようだ。

HiZ>m 4 4
I2C (mod spd)=( 0 3 )
Ready
I2C>WPv
Power supplies ON
Pull-up resistors ON
Pinstates:
1.(BR)  2.(RD)  3.(OR)  4.(YW)  5.(GN)  6.(BL)  7.(PU)  8.(GR)  9.(WT)  0.(Blk)
GND     3.3V    5.0V    ADC     VPU     AUX     SCL     SDA     -       -
P       P       P       I       I       I       I       I       I       I
GND     3.29V   5.02V   0.00V   5.03V   H       H       H       H       H
I2C>[0xa0 0 0]
I2C START BIT
WRITE: 0xA0 ACK
WRITE: 0x00 ACK
WRITE: 0x00 ACK
I2C STOP BIT
I2C>[0xa1 r:8]
I2C START BIT
WRITE: 0xA1 ACK
READ: 0x00  ACK 0x11  ACK 0x22  ACK 0x33  ACK 0x44  ACK 0x55  ACK 0x66  ACK 0x77
NACK
I2C STOP BIT
I2C>

便利かも。


最近の投稿】【最近のCPUボード】【2017の投稿】 【2016の投稿】 【2015の投稿

2018年8月 2日 (木)

COP400

若松で買い物をしたときに、 COP420NNL/Lがあったのでついでに買った。

Cop420

 COP400シリーズはNational Semiconductorの4bit Micro controllerで、National Semiconductor COP400を見ると、子供用のゲームや


↑(http://www.handheldmuseum.com/Mattel/Mattel-FuntronicsJacks_RLGL.jpg)

Apple Lisa のKeyboard, mouse, RTC and power switch controllerに使われていたらしい。

 若松で買ったCOP420NNL/Nは データシートをみると、MaskROM外部バス無しの製品だ。COP420とCOP402を勘違いしていたようだ。 orz

 最近、COP402Nを見つけたので買ってみた。

Cop402n1←(青っぽいのはカメラのせい)

COP402はRAM256byteで外付けROM用のバスが出ているのでDIP 40pinだ。立派。

 マクロ・アセンブラがあるようだ。
http://john.ccac.rwth-aachen.de:8000/as/


最近の投稿】【最近のCPUボード】【2017の投稿】 【2016の投稿】 【2015の投稿

2018年7月 9日 (月)

MELPS740

 最近ヤフオクの広告に三菱のマイコンの出品が表示されるようになった。

↓こんなやつ
Photo

 三菱半導体は今はRenesasになっているが、合併前に販売していたM16C、M32R、720、740シリーズは今でも販売している。

 広告に表示されるのは、MELPS740シリーズのM50747SPやM50734SPなどだ
M50747SPは 8kb MaskROM, 256bRAM、8bitTimer×3、GPIO×40、Input×8、Output×8、SIO×1
M50734SPは 外部ROM,RAM Timer:16bit×1,8bit×8, GPIO×32、Input×4、8bitA/D PWM, SIO×1

 MELPS740シリーズは6502の命令を拡張して組み込み用にした製品らしい。
半導体コレクション展示会場に解説がある。

 6502を入手しようと調べたときに、MELPS740も調べたのだが、売っているところがみつからなかった。

 出品者から修理に使うのならどの製品か教えてほしいと連絡があったが、単に興味本位でと回答しておいた。

 VTR等の組み込み機器に多く使われたらしく見かけたことが無い。 唯一バーコードリーダに使われていたのを見たことがある。 剥がして使おうかと思い調べたら外部バス無しMASK-ROMの製品(型番失念)だったので剥がすのを止めた。 

 今回 M50747を調べて気が付いた。この製品はMaskROMだけど、IOポートをバスにして外部メモリが使えるモードがある。 M50747もM50734も外部メモリが使えるのでどちらでもよいのだが、安いほうの、M50734SPを落札した。

M50734sp M50734marking

シュリンクDIPとはいえ、64PINのDIPは立派だ。

モニターが必要だなあ。 6502用のモニタが使えるのだろうか。



最近の投稿】【最近のCPUボード】【2017の投稿】 【2016の投稿】 【2015の投稿

2018年5月28日 (月)

STM8SをVersaloonで

 今年の大型連休にふと思い立ち、ジャンク化しているSTM8S-Discoveryを引っ張り出してきた。このボードは、ターゲットCPUはSTM8S105C6でST-Linkが付いていて安価なボードだ。

 ST-Link部分にはSTM32F103が乗っている。

Versaloon

ちょっと前に、ねむいさんの記事を参考にして、この部分を改造してSWD I/F用のVersaloon互換にして使っていた。

 残った、STM8Sは使うあてもなくジャンク化していたのだが、何か動かしてみないともったいないお化けが出てきそうだ。

Stm8sdiscovery

 ということで、
コンパイラはSDCCが使える。ライタはVersaloonが使える、書き込みソフトはVersaloonに対応したvsprogというツールを使うことにした。

 vsprogは以前にインストールした記憶はあるのだが、パソコンを変えてからインストールしていない。 バイナリがあったと記憶しているのだがVersaloonの本家サイトが無くなっていてドキュメントがない。 githubからソースを落としてきてmakeした。

ところが、vsprogでフラッシュが読み書きできない。

 SWIMをサポートしていないと言われる。 でも、VersaloonとOpenOCDでstm32のデバッグができているのでVersaloonは動いているようだ。

 STM8のフラッシュメモリの読み書きにはSWIMというインタフェースを使う。 SWIMが使えるのは、STM8x-Discoveryか純正ST-LinkかVersaloonだ。

 STM32F0-DiscoveryやNucleo401のST-LINKはSWD専用になっているので使えない。

 STM8S-DiscoveryのST-LinkはSWIM専用だ。 VersaloonはSWDにもSWIMにも対応しているというので改造したのだがSWIMが使えない。

Versaloon本家のサイトが閉じているようなので、ソースを読んでみることにした。 ヘッダファイルから読み始めると、だんだん思い出してきた。

 dongle/firmware/Projects/Versaloon/GCC/makefile中のHW_BOARD=STM8SDiscoveryにしてmailするとファームウェアができて、それをJTAG-KEYそっくりさんでSTM8SDiscoveryのST-Link部分に書き込んだはず。

 STM8SDiscovery.cfgを見ると、SWIMは0になっている。つまりこのファームウエアは対応していないということ。 orz

 SWIMを1にしてmakeするとエラーがたくさん出る。 ソースを真面目に読まないといけないようだ。 サイトは閉じているしなあ。

 STM8にはUARTから使えるbootloader機能があるのでUARTがあればファームウエアは書けるようだ。

ところが、bootloaderを有効にするためにはオプションバイトの値を書き換えなければならない。 オプションバイトを書き換えるにはSWIMで書き換えるしかないようだ。

 ということで、ST-Linkを買うことにした。そっくりさんだけど。
Amazonで探すと同じような製品が沢山出てくる。その中で一番安いやつを注文した。

 注文の翌日に発送にお知らせメールが来たが、5日~12日かかるという。 国内のストックではなく大陸から直接来るのか。


最近の投稿】【最近のCPUボード】【2017の投稿】 【2016の投稿】 【2015の投稿

2018年5月18日 (金)

i8080 <買うつもりはなかったのだけれど。つい...>

AmazonでST-Linkそっくりさんを買ったら。
お勧めが出てきた。

NEC 汎用 USART PROGRAMMABLE COMMUNICATIONS INTERFACE UPD8251AFC    ¥ 350
OKI Semiconductor 汎用品 8bit CMOS MICROPROCESSOR MSM80C85AH    ¥ 290
NEC CLOCK GENERATOR and DRIVER for 8080A UPB8224C        ¥ 320

8085に8224は必要ないだろうと一人でツッコミを入れながら、8080も売っているのか検索したら、売っていた。

NEC 8bit 2MHz MPU i8080互換 UPD8080AFC    ¥ 1,200

ちょっと高い。コレクションならセラミックパッケージの方が良いかな...

8080_s

Upb8224c_s ←クロックジェネレータ

Upd8228c_m ←システムコントトーラ

Upd8251afc ←USART

 なんだかそろってしまった。

 8080を初めて知ったのは、たしか1976頃のCQ誌で8080を使ったモールス解読器の記事だった。

 当時、コンピュータは科学特捜隊に出てくるようなイメージだった。


↑(https://cdn.snsimg.carview.co.jp/minkara/userstorage/000/038/645/744/549b14ee09.jpg?ct=cba21fcfd098)

それが、個人でコンピュータが作れることに、すごく興奮したのを覚えている。 でも、厨房だったからとても小遣いで買えるようなものではなかった。

 退職された職場の大先輩は8080が出たときに20,000円くらいで取り寄せてもらったそうだ。 秋葉の部品屋の店頭にはなかったそうだ。 今はDigikeyでポチればアメリカから3日で届く。

 8080は電源が+5Vの他に-5Vと+12Vが必要だ。
8080の回路図を最初見たときに「あ、めんどくさっ」と思った。 すぐにZ80が出てきて5V単一電源で命令も拡張されていたから、なにも好き好んで8080使わなくていいよねと思っていた。

 5V,1A、12V,0.1A、-12V,数mAの電源と聞くと、オヤジはついトランスの大きさと重さを思い浮かべてしまう。

 まあ道楽で、先人たちの苦労を垣間見るなら電源から作るのもありだが、今時ならスイッチング電源を使うよね。

 当時電源から作った先輩達からは、「この軟弱者!」と言われるのかな?
と思いながらついポチってしまった。(^^ゞ

 セラミックパッケージの8080を買うとコレクションにしてしまう可能性が高いので、あえてプラスチックパッケージを。


最近の投稿】【最近のCPUボード】【2017の投稿】 【2016の投稿】 【2015の投稿

より以前の記事一覧

2018年12月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

最近のトラックバック