PSoC で遊ぶぞ!でも述べたとおり, 秋月電子通商で売っているCY8C26443という PSoCチップは,Invention Board ではあいにくと書き込めません.チップにプログラムを書き込むための ISSP の通信 プロトコルが変更されてしまっているためです.PSoC をより気軽に楽しめるようにするために, Invention Board を使って 26443 用のファームウェアライターを作成することにしました.
直接のきっかけは,アプリケーションノートAN2134の発見でした.26443を使って26443のライターを 作成した,というのです.PSoC らしさを生かした,とても面白い作成方法です.27443 に移植すれば, すなわち Invention Board を利用して 26443 の書き込みができることになります.
また,Invention Board には,I2Cによる 27443 との通信機能が隠されていることが, パステルマジックのこのページに紹介 されています.これを使えば,PCからのデータ転送にUSB を使って書き込みができることになります.
かくして,「パステルマジックで Invention Board(およびその関連商品)を買えば,秋月の26443がばんばん焼けます!」 を合言葉に(笑),開発を始めました.2004-07-30 に最初のプロトタイプがまとまりました.
開発風景です.ノートパソコンと,PSoC Invention Board Clone 基板,および 26443 Firmware Writer基板です. |
2つの基板を拡大したところ.起動させたばかりで,LCD にはウェルカムメッセージが出てます. 2つの基板をつなぐ線は,電源供給およびISSP通信のための5本の線です. |
データを書き込んでいるところ.LCDを利用して書き込み状況がモニタできるようにしました. なかなかかっちょいいでしょ(笑). |
26443 Firmware Writer基板の拡大写真.シリアルらしきものや,ゼロプレッシャーソケットなど が見えていますが,まだ結線していません.AN2134の機能完全コピー版の作成をねらっていることが ばればれ(笑). |
ファームウェアを書き込んだ 26443 を動作させているところです.サンプルは パステルマジックの「PSoCチュートリアル」のページ の例題です.オリジナルはP0[0]とP0[1]にLEDを結線していますが,ここでは,ICチップの片側だけ結線すればいいように, P0[0]とP0[2]を使っています.左の緑と右から2番目の赤が点滅しています.一番右の赤LEDは, 単なる電源ランプになっています(笑).そうそう,これらの電源はみんな USB からもらっていますが, ファームの書き込み時はちょっと容量が足りないようで,この赤LEDがちかちかしてます.外部電源のほうが いいですね. |
PC側で動作するクライアントアプリケーションの画面です.まずは起動したところ. |
はじめにファームウェアファイルを読み込みます.ファイルが読み込めると,「ファーム書込み」, 「確認」(ベリファイ),「チェックサム」,「ダンプ」(ファームウェアを読み出す),そして 「プロテクト」(ファームウェアを読み出せないようにロックをかける)の5つの機能が利用 できます.(ダンプだけは,ファイルを読み込まなくてもできます.) |
ファームウェアを書き込み中の画面.書き込みは中断できません. |
書き込みが完了したときの画面. |
ダンプ機能で,ファームウェアを 26443 から読み出しているところ.ダンプリストが表示されている窓の内容は, クリップボードにコピーすることができます. |
私が行なった作業は,
オリジナルのソースは,とくにPCからのデータを読み込むあたり,かなり微妙な
(タイミングによってはうまく動作しない)コーディングです.
たとえば,ファームを焼いてつづいてセキュリティ情報を書き込むところや,
チェックサム情報を検査するところなど,
どうして単純に IF 文で検査していいのか.確か
にタイミングによっては,先読みが効いてちゃんと extCode がセッ
トされるでしょうが,かなり危ういです.
結局,低レベルの関数はほぼそのまま使いましたが,あとはすっかり書き換えてしまいました.
そのほうが見通しがよいので.
今回,Designer に Design Rule Checker という機能がついているのをはじめて知りました. 今回はこれに助けられました.「CounterのclockにSysClk*2 を使うときは, ClockSync は unsynchronized にしとかんとだめよー」だって. これのせいで最初 Execute Mode の 2MHz 方形波がちゃんと SCLK にでてくれず.1晩を無駄にしました.あーくやし...
27443 に移植するときに大きくはまった問題のひとつは,SPIM と ExecuteClock の
切り替えのやり方が,26系と27系では違っていることでした.
27系のほうが,チップ内のバスの構造が複雑になっており,切り替え方法もやや分かりにくくなっています.
自由度はたいそう向上しているのですが,その代償というところでしょうか.
また,SPIM モジュールをつかったターゲットとのやりとりで,送信と受信に同じポートを使い,
送信のときはstrong,受信のときはHighZにポートを設定して,これでグローバルIOの送信受信も
連動して切り替わることをつかっています.まえK.I.さんとポートの
モード設定について一緒に考えたときに勉強したことだったのですが,最初気がつかなくて,
MOSIの設定とMISOの設定をうまく合わせておかないと,おかしいなデータが読めないぞ,
ということになります.
ファームの書き込みができるようになったのは7月29日でした.ところが,どうしても Verify が動かなかった のです.原因がわかるまでに1日かかりました.つまり,AN2134のソースでは,ファームを書き込んだあと セキュリティ処理してチェックサム確認して,とやるのですが,そうです,セキュリティ処理したんだから, ファームが読み出せないわけです(笑).で,Verify というのは,Targetからファームを読み出して 手元のファームと付き合わせるということなので,これはできっこありません.あああ,おばかさん.くやし.
あとは,PCと27443のやりとりが I2C+USB でちょっとややこしく,通信の細かいところが よくわかりません.たとえば,データをPCに読んでくる手続き EZ_I2CRd は,27443側でデータの準備ができて いないと,前に読んだバッファの内容をそのまま返してきてエラーにならないので,いろいろ工夫をして, 望みのデータが来るまで待つような仕掛けを入れなければなりませんでした.うーん,もう少し丁寧に調 べてやれば,もしかするとちゃんとエラー情報をどこかに返しているかもしれないなあ....
というわけで,だいたい PSoC Invention Board Programmer と同じような機能を実現することができました.
現在公開しているのは,「Prototype Version A (2004-07-30)」です.Invention Board 内の CY8C27443 上に書き込む ファームウェアと,PC上のクライアントソフトから構成されます.
本ソフトは,引用改変を含めてご自由にお使いください.(著作的人格権を行使しません.)
本ソフトは,your own risk でお使いください.本ソフトのご利用によるそちらの不利益の一切について,責任は負いません.
ファームウェアのソースプログラムは,PSoC Designer Version 4.1 Build 931 で開発しています. メインプログラムは C 語で書かれています.
ファームウェアのソースプログラムを解凍すると,PSoC26xWriter_by_IVB という名前のディレクトリが できます.その下の output/psoc26xwriter_by_ivb.hex を PSoC Invention Board Programmer を使って 27443 に焼きます.これで Invention Board が 26443 Firmware Writer のハードウェアとして使える ようになります.
Invention Board と,ターゲットである PSoC 26443 との間は,以下のように3本の線で結線します.
Invention Board (27443) | Target PSoc (26443) |
---|---|
P0[3](3番ピン) | Xres(19番ピン) |
P0[5](2番ピン) | SCLK(13番ピン) |
P0[7](1番ピン) | SDATA(15番ピン) |
アプリケーションノートAN2014「Design for In-System Serial Programming (ISSP)」のAppendex 2: によれば, 次のように保護抵抗(56Ω),プルダウン抵抗(330Ω),および,ノイズ除去のコンデンサ(330pF)を入れるとよいようです. (私はそうしています.ただしコンデンサは手持ちの470pFを使いました.)
P0[3](3番ピン) --+----------------------------- Xres(19番ピン) | +--コンデンサ330pF--GND P0[5](2番ピン) -----抵抗56Ω-------------------- SCLK(13番ピン) P0[7](1番ピン) --+--抵抗56Ω-------------------- SDATA(15番ピン) | +--抵抗330Ω--------GND |
AN2134 にならい,ファームウェアライターの動作を表示するLEDを,次のようにInvention Board につけます.
P0[0](24番ピン) ---LED(緑)---抵抗470Ω---GND P0[2](25番ピン) ---LED(赤)---抵抗470Ω---GND |
ファームウェアライターの動作状況をより詳しく表示するため,LCDモジュールをつけることができます.
ご提供のファームウェアは,LCDモジュールをつけた状態を想定して作成しています.もし使わない場合は,
main.c の「#define USELCD」をコメントアウトして再度ビルドしていただければ,LCDモジュールを呼ばなく
なります.
LCD モジュールは 27443 の Port 2 に接続します.結線の方法は PSoC Designer によって指定されています
のでここでは省略します.
ファームウェアの書き込みが終わり,Invention Board を再起動すると,LCDモジュールがつないであれば, 「PSoC 26xxx Writer Ready!」の表示がでるはずです.
PCクライアントのソースプログラムを解凍すると,PSoC26xWriter_by_IVB_CLIENT_VB という名前の ディレクトリができます.この下のPSoC26xWriterClient.exe を起動すれば,ファームウェアライター の起動ということになります.あ,もちろん Invention Board と PC はつないでおきます.
必要なランタイムモジュールを含む再配布パッケージをご提供すべきですが,当方のプアーなWeb容量では, 2メガを超える再配布パッケージを置くのはしんどいです.もし上の exe がモジュール不足で動かない場合は, VB6用のランタイムモジュールを各自インストールしてください.
PCクライアントの使用方法は,PSoC Invention Board Programmer とほとんど同じです.すなわち, 最初にファームウェアのファイルを選択します.「選択」のボタンを押すと,ファイル選択の ダイアログが開きますから,ファイルを選ぶと,ファームウェアファイルを読み込みます. すると,「ファーム書込み」, 「確認」,「チェックサム」,「ダンプ」,「プロテクト」の5つのボタンが押せるように なります.(ダンプだけはファイルを読み込まなくても利用できます.)
各処理の実行中には,Invention Board についた緑のLEDが点滅して,動作中であることを知らせます.
また,LCDモジュールも処理の段階や進捗状況などを表示します.
処理が失敗すると赤のLEDが点灯し,Invention Board はフリーズします.電源を切って
(USBケーブルを抜いて)再度投入(USBケーブルを差して)やれば,リセットがかかり初期状態に
戻ります.このときPCクライアントは「I2Cライトができませんでした」とか「I2Cリードができませんでした」
という確認ダイヤログを表示して,強制終了します.
よくやるのが,あとでご紹介しますが,セキュリティ処理をかけたPSoC に対して
「確認」をかけたときで,赤LED点灯でとまってしまうと同時に,PCクライアントも
フリーズします.このときは,USBケーブルを抜いて,強制的にエラーを起こしてクライアントを止めて
ください.
PCクライアントがInvention Board とうまく通信できないことがあります.これは, USB接続がPCに正しく認識されていないのが原因なので,USBケーブルを一度抜いてまた差して, の動作を行ってみてください.
現在の状態を表示する窓の内容は,「クリップボードにコピー」を押して,クリップボードに コピーできます.あとやメモ帳やエディタを開いて貼り付ければ,ダンプしたファームウェアを 記録するときなどに便利です.
「バイナリ転送モード」というチェックボタンは,開発のなごりでついているもので,そのうち なくなります.常時チェックでご利用ください.チェックをはずしてもプログラムの機能はまっ たくかわりません.ただし,PCからのファームウェアの転送が倍の時間かかるようになります. ちなみに,ファームウェアの書込み時間の目安は,約1分15秒〜20秒です.これがバイナリ転送 モードのチェックをはずすと,2分半以上かかるようになってしまいます.
「セキュリティ書き込みモード」のチェックボタンをチェックすると,ファームウェアの書込み と同時に,セキュリティ処理を施して,ファームウェアが読み出せなくなります. 「セキュリティ書き込みモード」をチェックしない状態で書き込んだファームウェアでも, あとから「プロテクト」のボタンを押して,セキュリティ処理を施すことができます. セキュリティ処理を施した PSoC チップでは,「確認」でファームウェアの書き込み内容を チェックしようとしても,必ず失敗するようになります.また「ダンプ」でファームウェアを 読み出すと,でたらめの情報が読み出されます.
サンプル用の26443ファームウェアをソースプログラムごと置いておきます. パステルマジックの「PSoCチュートリアル」のページ の例題を,オリジナルのP0[0]とP0[1]から,P0[0]とP0[2]にLED+抵抗を結線するよう変更したものです.