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

CPUボード

2020年2月18日 (火)

TMP92CM22FG

TMP92CM22FGは東芝の16bitCPU TLCS-900Hシリーズ

 秋月で見つけたので買っておいたもの。0.5mm 100pinQFPの半田付けはまだできると思っていたのだが、最近歳のせいか弱気になってきたので、知人に頼んで付けてもらった。さすがに綺麗に付いてる。

Tmp92cm22fg

 知人曰く実体顕微鏡を買えと。商売じゃないので年寄はDIPで遊ぶことにしよう。

 TLCS-900H1シリーズは、東芝のZ80上位互32bit.CPU
TLCS-900→TLCS-900/H→TLCS-900/H2→TLCS-900/H1らしい。H2よりH1の方が後発。
「TLCS-900/H&H2活用ハンドブック」をAmazonで買ってみた。

Tlcs900h

 ↑の本の付録CDにアセンブラが収録されている。コンパイラはメーカ製があるけれどFreeで公開されてない。gccでもサポートされてない。ここがSHやH8と違うところか。

 京セラが1998年に発売したPHS データスコープDS110にもTLCS-900/Lが使われていて、データスコープの開発キットにコンパイラもある。開発キットは当時無償で配布された。

Datascopecd

 コンパイラ(CC900.EXE)はあるけど16bitアプリだ。そのままでは64bit Windowsで動かないが、MS-DOS playerで動くようだ。

 ボードを作ろう。


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

2020年2月14日 (金)

ADALM2000(2) <開けてみた>

ADALM2000(M2K)を買った

やっぱり中が気になるので開けてみた。

〇表

Adalm2kpcb

〇裏

Adalm2kpcb2

AD9963

Ad9963

 この製品のキーパーツ。

100Msps12bitADC×2, 170Msps12bitDAC×2 のミクスト・シグナル・フロントエンド。
SDRや超音波医療機器のフロントエンド、携帯用測定器への応用を想定しているらしい。

Zynq-7000 SoC

Zynq7000

  旧AlteraのFPGA Artix-7とDual-Core ARM Cortex-A9が入ったSoC
組込みLinux+ハードウェアを制御する部分はFPGAで実装するのでデジタル回路は少なくなる。
この製品も、AD9963とZYNQ-7000以外はアナログ回路だ。さらに、FPGAで、ロジックアナライザやパターンジェネレータを実装している。

〇JTAG&Serial

 JTAGとシリアルのコネクタがある。

Adalm2ktp

 AD9963が想定している用途では、アナログ回路の設計が重要になるが、アナログ回路の技術者は不足していてなかなか育成できないから貴重だ。だから、チップベンダーとしてはチップを開発するだけでは売れず、売ろうとするチップを使用した製品を積極的に市場に投入しないと使われない(使えない)のではないだろうか、と考えるとこの製品は設計見本なのだろう。そのうち、半額以下でパチモンが出てくる?。(^^;

 やっぱり、Wifiのチップはない。
今時bluetoothやWifiのモジュールは安くなっているので入っていてもよさそうだ。しかし、無線モジュールを実装するとノイズが増えるだろう。使い勝手は良くなるが測定器として使うには素直なほうが良いという設計方針なのだろう。

 作業机で使うことを考えるとPCよりタブレットで使えるとうれしいのだが。

 



最近の投稿】【最近のRF】【最近のFPGA】【最近のCPUボード】【2019の投稿】【2018の投稿】【2017の投稿】【2016の投稿】【2015の投稿

2020年2月10日 (月)

ADALM2000 <1台の装置で複数の計測>

 アナデバのADALM2000(ADALM2K)を買ってみた。

 20年くらい使っているアナログオシロがくたびれてきたにで新しいと思い安物のデジタルオシロを探していた。ディスプレイを持たないUSB接続のオシロはかなり安くなっているようだ。ところが、安物の帯域は1MHz程度が多い。オーディオ帯域を見るならこれでも良いのだが、やはり、高周波も見たい。

Analog Discovery 2は100Msps/14bit/2chでよさそうだが、¥3,6720@秋月なのでディスプレイがあるDSSが買える。
Open Scope MZ は6.25Msps/12bit/2chで1,0580@秋月だ。帯域は物足りないけどこれを買おうかと思っていたら、ADALM2Kに気がついた。
ADALM2Kは100Msps/12bit/2chで1,2580@秋月だ。分解能はAnalog Discovery2より劣るが値段が1/3だからこんなもんだろう。
2018年から販売しているらしい、気がつかなかった。

アナデバのページ(https://www.analog.com/jp/analog-dialogue/studentzone/studentzone-june-2019.html)によると機能は、

  • USB 2.0/OTGに対応(LANとWi-Fiをサポート)←LANとWifiをサポートの意味が分からない
  • 2つの汎用アナログ入力
    差動、±25V、1MΩ || 30pF 、12ビット、100MSPSのADC。帯域幅は25MHz
  • 2つの汎用アナログ出力
    シングルエンド、±5V、50Ω、12ビット、150MSPSのDAC。帯域幅は30MHz
  • 2つの可変電源
    0V~5V、-5V~0V、50mA
  • 16本のデジタル入力/出力ピン
    3.3V、1.8V、100MSPS、5Vトレラント
  • 2つのデジタル・トリガ
    3.3V/1.8V、100MSPS、5Vトレラント

というもの。

中身は、本体とUSBケーブル、5x2のアナログ用ワイヤ、10x2のデジタル用ワイヤ。

Adalm2k2

ピン配置はコネクタの上面に印刷してある。

Adalm2kcon
左側(1+~GND)はアナログ、右側はデジタルIO 16ch。

 BNCコネクタのプローブが使えないと不便だ。BNC拡張基板を作ろうかと考えて部品をカートに入れたら、Analog discovery2用のBNC拡張基板と値段があまり変わらないので一緒に買った。(年を取るとめんどくさくなるんだよね)

Adalm2kbnc

左側がアナログ入力(2ch)、右側がアナログ波形出力(2ch)、AC/DCカップリングは青色ジャンパーでの切り替える。本体のピンはすべて下側のヘッダピンに出ている。

 M2Kの回路図は(https://wiki.analog.com/university/tools/m2k/devs/hardware)で公開されている。

 M2Kの構成をざっくりいうと、2ch,100MspsのDAC/ADC(AD9963BCPZ)+Linuxだ。LinuxはXilinxのSoC、ZYNQ-7000(ARM Cortex-A9 Dual-Core)に実装している。ARM Cortex-A9 Dual-Core,RAM512bだかiPhone4Sくらいか。

 回路図にはWifiが載ってない。ラベルにMACアドレスが書いてあるので載っているはずなのだが、

Adalm2kmac

 PCに接続すると、たくさん認識される。

M2k_devices

〇ディスクドライブ

M2k_massstrage

認識されたドライブにinfo.htmlがあるのでブラウザで開くと、ファームウェアのバージョンなどの情報を見ることができる。このドライブでDFUを使ってファームウェアのアップデートできる。

〇シリアルデバイス

M2k_serial_login

 ターミナルソフトを使って115,200bpsで接続するとログインできる。
ユーザー/パスワードはwiki(https://wiki.analog.com/university/tools/pluto/drivers/windows)にある。

〇ネットワークアダプタ

M2k_ssh_login

 NICとしても認識しているので、192.168.2.1にブラウザでアクセスすると、ストレージで見えるinfo.htmlと同じ内容が表示される。また、sshでアクセスするとログインできる。

 netstatで待ち受けポートを見ると 30431/TCPが開いてる。調べてみると、IIOらしい。IIOはLinux Industrial I/O Subsystem(https://wiki.analog.com/software/linux/docs/iio/iio)で、簡単に言うとA/D、D/Aにアクセスするしくみだ。A/D入力、D/A出力しようとすると、どこかでバッファを持たなければならないのだが、IIOはドライバがリングバッファを経由したアクセスを提供してくれるので、アプリはバッファを管理しなくてよい。

 機能に書いてあった、LANというのは、ネットワークデバイスのことだろう。じゃあ、Wifiってなんだ?

 たぶん続く


最近の投稿】【最近のRF】【最近のFPGA】【最近のCPUボード】【2019の投稿】【2018の投稿】【2017の投稿】【2016の投稿】【2015の投稿

2019年8月31日 (土)

27C322

16bitのUV-EPROM(27C322)を買った。

27c233x10

↑未使用らしい。10個も使う予定はないのだけれど、ちゃんとしたところで1個買うより安かったりする。

27c322x1

↑16bitのEPROMは大きい。窓も大きい。42pinのDIPは立派だZ80より大きい。

↓マーキング

27c322_marking1

UV-EPROMはデータ消去が大変でフットプリントも大きいので使いやすいFlashメモリに変わっていった。

紫外線ではなく電気的にデータを消去できるEEPROMも昔からあったけど容量も少なく高かったので買った記憶がない。 

パソコンのBIOSも初期の頃はUV-EPROMが使われていたが、EEPROM(DIP)が使われてるようになった。
探したら出てきた。上からMX29F002(256K×8bit)、SST29EE020(256K×8bit)、W29C011(128K×8bit)

Bios_flashrom

 ところで、27C322は2M×16bitで、持っているロムライタ(TOP2007)は対応していないので読み書きできない。

こんな↓アダプタを使って、ターゲットを27C4096(256k×16bit)にして何回かに分けて書くらしい。

 

このアダプタはTL866用で、持っているロムライタ(TOP700)は16bitのEPROMに対応していないようなので、さらに上位8bitと下位8bitを分けて書かななければならない。



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

2019年4月25日 (木)

インテル8080伝説 <ゴールデンエイジが羨ましい>

インテル8080伝説 鈴木哲哉 ラトルズ

8080

 この本の奥付をみると著者の鈴木哲哉氏は1955年生まれのようだ。
IT業界の1955年は超ゴールデンエイジだ。 Apple創業者のスティーブ・ジョブズ、MicroSoft創業者のビル・ゲイツ、WWWの考案者ティム・バーナーズ=リー、Java生みの親ジェームズ・ゴスリンそしてBSD UNIXのビル・ジョイ(1954/11生まれだけど)らが1955年生まれだ。 オヤジはゴールデンエイジの6歳下だ。この6年の差は大きい。

 8080が発売されたのは1974年8085は1976年、Z80も1976年だ。マイコンを知ったのは1976頃、まだ厨房のころだった。8080の発売が13才、Z80の発売は15才の厨房だが、ゴールデンエイジの彼らは、8080発売時19才、Z80発売時21才だ。
自分で買えるか買えないかの差は大きい。 いずれにしても田舎では売ってなかったんだけど。

閑話休題
 自分でマイコンが買えるようになった時に、積極的に8080を使うメリットはなかった。
Z80は最強だったし、5v単一電源で動く8085があった。

 8080が使われた機器は見たことがないけど、8085が使われた機器を見たことがある。1986年頃職場に入った機器に使われていた。確かM電機製。
 なんで8085?と思ったけど、当時M電機は8085のセカンドソースを造っていて、Z80のセカンドソースは造ってなかったからだろう。

###

つい買ってしまった uPD8080AFC

8080_s

コレクションになりそうなuPD8080A

8080a_s



最近の投稿】【最近の書籍・雑誌】【2018の投稿】【2017の投稿】【2016の投稿】【2015の投稿

2019年3月 3日 (日)

Line tracer <ちびギアモータ>

ネットでギアードモーターを探していたらこんなのを見つけた。

Photo

 ちっちゃいものくらぶが領布している「ちびギアモータ」 プリ―付きで400円だ。

 ギアードモーターはモータと減速機構が一体になったモータで、外部にギアボックスが不要になる。

業務用は当然だけど高い。
千石で模型用の安いのを探してみると1000円~2000円くらいだ。
ギアがプラスチックでよければこんなのもある。


↑(https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-0F4C)

「ちびギアモータ」は他のギアードモーターとくらべて消費電流が少ないようだ。

〇プラスチックギヤードモータ」(千石)
 電源電圧6V 無負荷時消費電流:120mA、無負荷時回転数23~28rpm

に対して

〇「ちびギアモーター」(ちっちゃいものくらぶ)
 動作電圧 3~6V、5V無負荷時:35mA、回転数120rpm

 AVRのGPIOで直接駆動できるらしい。
消費電流が大きいとトランジスタやFETでドライブしなければならないから部品が増えるけど、GPIOで直接駆動できるならとてもお手軽だ。

AVRの絶対最大規格はピン当たりの出力電流は40mA、デバイス全体の消費電流は200mAだから「ちびギアモーター」2個は回せそうだ。

負荷をかけるとピン当たりの制限に引っかかりそうだが、超えたらからといってすぐに燃えたりしないだろう。そのあたりは売り物にするわけではないので勝手にやれば良い。

 プーリーにはφ25でOリングがはめてあるのでタイヤに使える。 台車にモータとタイヤを付けてまっすく走るだけでは面白くないので、ライントレースをやってみよう。

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で制御してみる。

 接続はこんな感じ↓

BusPirate
LED&KEYMOSI---DIOCLK---CLKAUX---STB5V-+-VCCVPU-+ 
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 Host dir SD 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の投稿

より以前の記事一覧

2020年2月
            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

最近のトラックバック