トップページへ

PSoC CY8C26443 ファームウェアライターの製作

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クライアントのソースプログラム

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+抵抗を結線するよう変更したものです.

ページの先頭へ
ページの先頭へ
トップページへ