初めにdsPICモジュールにファームウェアをロードしなけばなりません。
ファームウェアの更新に必要なファイルは5つです。
まずCQ出版社のページからTR0803W.zipファイルをダウンロードします。含まれている次の2つのファイルを使用します。
最新版のソフトウェアはこのページの「ダウンロード」にあります。
さらにトランジスタ技術2007年8月号付録のCDROMから次の3つのファイルを用意します。
- dsPICer.exe(PCソフトウェア)
- dsPICer.hex(ファームウェア)
すべをPC上の同じディレクトリに配置します。ライタとPCをUSBシリアル変換ケーブルで接続しておきます。
- dspicguy.bat(バッチファイル)
- HEXCONV.COM(変換ソフト)
- loadspic.exe(更新ソフト)
PC上の通信ポート番号を確認しておきます。Windows Vista の場合は、コントロール パネル->デバイス マネージャ->ポート(COM と LPT)で確認できます。
ファームウェアの更新手順は次のとおりです。
- 電源切り替えジャンパースイッチを5Vに設定します。
- dsPICモジュールのモードスイッチをLD側にして電源を入れます。
- dsPICモジュールの押しボタンスイッチSW1を押しダウンロード準備状態にします。緑LEDが点灯します。
- dsPICer.exe を起動し、USBシリアル変換ケーブルの通信ポートを選択します。
- PCソフトウェアからFile->Updateを実行します。自動的にDOSウィンドウが開き完了します。
- dsPICモジュールのモードスイッチをRUN側にします。
RS232Cの通信速度の切り替え問題
- dsPICerで操作直後にファームウェア更新が「一度」で正しく行われないことがあります。その場合、再更新してください。正常に更新されているかLDを確認ください。
- ファームウェア更新直後、dsPICerの操作ができないことがあります。その場合、Detect を何度か試し正常に通信できることを確認してください。
- この現象はUSBシリアルのドライバに起因するものと思われます。ファームウェア更新とdsPICerの通信速度が異なるため、正しく切り替わらないことがあるようです。
Ver 1.7 からデフォルトで「拡張ICSP方式」を採用しました。 これにより、処理速度を大幅に短縮しました(PICkit2と同等程度です)。
「従来のICSP方式」を利用する場合は[Option]-[Enhanced ICSP]のチェックをはずしてください。
「拡張ICSP方式」とは次の動作をします。初期にPE書き込みを必要としますが、総合的に拡張ICSP方式のほうが有利です。特に書き込み容量が大きい場合、この差が顕著になります。
- はじめに拡張ICSP用プログラム(Programming Executive(PE)モジュール)を「従来のICSP方式」でExecutive Code Memory領域に書き込みます。
- 書き込んだ「PEモジュール」を利用して高速処理を行います。処理に必要な転送データ数が減り、細かい処理をPEモジュールで行うため時間短縮になります。
- このため、PEモジュールが書き込まれていない場合、初期段階でPE書き込み処理が発生します。
- ブランクチェックや読み込みでもPE書き込みが発生することがあります。
- チップ消去を行うとPEモジュールも消去されます。
dsPIC30F2011(12KBytes)の全プログラム領域処理時間PIC24FJ32GA002(32KBytes)の全プログラム領域処理時間
- 消去+書き込み+照合 従来ICSP方式 14秒 拡張ICSP方式 9秒 従来ICSPと拡張ICSPの処理時間比較例
- 消去+書き込み+照合 従来ICSP方式 34秒 拡張ICSP方式 15秒
●準備
拡張ICSP書き込みを行うためには、Programming Executiveモジュールを dsPICer.exe と同じディレクトリに配置してください。
具体的には以下のファイルをディレクトリ C:\Program Files\Microchip\MPLAB IDE\ICD2 からコピーしてください。●注意事項
- pe.hex
- pe24f.hex
- pe33f.hex
現在以下のシリーズで拡張ICSP方式を利用できません。従来のICSP方式を利用してください。
またPEモジュールを書き込むとプログラム領域が消去されるという副作用があります(EEPROM領域は影響ありません)。
- dsPIC30F SMPSシリーズ
●メモリ構造
参考までにメモリ構造を示します。Executive Code Memory 領域は独立しており、通常動作に影響を与えない構造になっています。
dsPICer.c をコンパイルする場合のテクニックです。
MPLAB C30 でコード・オプティマイズします。試用期間を過ぎると利用できません。
MPLAB IDE のメニューから Project -> Build Options... -> dsPICer.c
Categories: Optimizaton
デフォルトでは最適化なしの Level=0 になっていますので、Level=s に設定します。
MPLAB C30 は gcc をベースにしていますので、最適化オプションの意味もほぼ同じです。
大まかな意味は次のとおりです。
Level=0 と Level=s ではかなり処理速度が改善されます。
Level 意味 0 最適化なし、デバックなどで使用 1 少しだけ最適化 2 もう少し最適化 s 処理速度とコードサイズをバランスして最適化 3 コードサイズを犠牲にしても処理速度を優先して最適化
1.0では確実かつ安定に動作することを目的に作成しました。
1.1では内部ルーチンの整理と処理の高速化を行いました。
1.2ではチューニングし処理の高速化を行いました。
1.3では新しいデバイスを追加対応しました。
1.4では新しいデバイスを追加対応しました。
1.5では拡張ICSP用のProgramming Executive モジュール書き込みを可能にしました。
1.6ではdsPIC30のプロテクト解除問題に伴う調整を行いました。
1.7では拡張ICSP方式に対応しました。
Ver. 1.8 から 1.9
- dsPIC33/PIC24のキャリブレーションを保持するようにしました。
Ver. 1.7 から 1.8
- 64KBより大きいフラッシュメモリでReadを実行すると無限ループする問題を修正しました。
Ver. 1.6 から 1.7
- 拡張ICSP方式をデフォルトにしました。
- ファームウェアの更新が必要です。
Ver. 1.5 から 1.6
- dsPIC30のプロテクト解除問題に伴う調整を行いました。
- ファームウェアの更新が必要です。
Ver. 1.4 から 1.5
Programming Executive モジュールはディレクトリ C:\Program Files\Microchip\MPLAB IDE\ICD2 にあります。 (実はpe24f.hexとpe33f.hexは同じものです。)
- 拡張ICSPの準備です。拡張ICSP方式を装備したわけではありません。
- 拡張ICSP方式の書き込みを行うためには従来のICSP方式であらかじめProgramming Executive モジュールを書き込んでおく必要があります。
- Programming Executive の読み書きを可能にしました。
- ファームウェアの変更はありません。
dsPIC30用 pe.hex dsPIC33用 pe33f.hex PIC24FJ用 pe24f.hex PIC24HJ用 pe33f.hex
Ver. 1.3 から 1.4
追加対応したデバイス
- 新しいデバイスを追加対応しました。
PIC24FJ 128GA106, 128GA108 ,128GA110
192GA106, 192GA108 ,192GA110
256GA106, 256GA108 ,256GA110
64GB106, 64GB108 ,64GB110
128GB106, 128GB108 ,128GB110
192GB106, 192GB108 ,192GB110
256GB106, 256GB108 ,256GB110
Ver. 1.2 から 1.3
追加対応したデバイス
- 新しいデバイスを追加対応しました。
dsPIC33FJ 06GS101, 06GS102, 06GS202
16GP304, 16GS402, 16GS404, 16GS502, 16GS504, 16MC304
32GP202, 32GP204, 32GP302, 32GP304, 32MC202, 32MC204, 32MC302, 32MC304
64GP202, 64GP204, 64GP802, 64GP804, 64MC202, 64MC204, 64MC802, 64MC804
128GP202,128GP204,128GP802,128GP804,128MC202,128MC204,128MC802,128MC804PIC24HJ 16GP304
32GP202, 32GP204, 32GP302, 32GP304
64GP202, 64GP204, 64GP502, 64GP504
128GP202, 128GP204, 128GP502, 128GP504
Ver. 1.1 から 1.2dsPIC30F2011(12KBytes)の全プログラム領域処理時間
- チューニングを施し、処理を高速化(書き込み速度は約2倍、読み込み速度も約2倍向上)。
- ファームウェアも更新する必要があります。古いファームウェアとの組み合わせでは正常に動作しません。
PIC24FJ32GA002(32KBytes)の全プログラム領域処理時間
- 書き込み 消去+書き込み 消去+書き込み+照合 読み出し+ファイル Ver1.2 5秒 8秒 16秒 13秒
- 書き込み 消去+書き込み 消去+書き込み+照合 読み出し+ファイル Ver1.2 14秒 15秒 39秒 34秒
Ver. 1.0 から 1.1dsPIC30F2011(12KBytes)の全プログラム領域処理時間
- 内部ルーチンを整理し、若干スリム化(196KBから192KB)
- 一部のルーチンをPC側からファームウェア側に移動し、処理を高速化(書き込み速度は約2倍、読み込み速度は約5倍向上)
- 古いファームウェアとの組み合わせでも動作しますが、処理速度は改善されません。
PIC24FJ32GA002(32KBytes)の全プログラム領域処理時間
- 書き込み 消去+書き込み 消去+書き込み+照合 Ver1.0 24秒 31秒 103秒 Ver1.1 11秒 14秒 28秒 ※実際には無駄な書き込み、無駄な照合を省略するので、上記処理時間より短くなります。
- 書き込み 消去+書き込み 消去+書き込み+照合 Ver1.0 58秒 62秒 263秒 Ver1.1 27秒 29秒 70秒
まず、ハードウェアに誤りがないか確認してください。初歩的なミスになかなか気づかないものです。
(1)dsPICer.exe を起動し、"Connect" を実行します。
(2)次に "Detect" を実行します。
- 接続に失敗する場合、PCとdsPICモジュール(トランジスタ技術付録)の間に問題があります。
- 接続できるまで他の操作は一切できません。
- USBシリアル変換ケーブルのポート指定を誤っていませんか?
- dsPICモジュールのファームウェアを更新しましたか?
- なお、通信速度はソフトウェアが自動的に設定しますので、PC側で設定する必要はありません。
- 書き込み対象のデバイスを認識しない場合、dsPICモジュール(トランジスタ技術付録)と書き込み対象のデバイス間に問題があります。
- デバイスを認識しない場合、「Erase(消去)」「Write(書き込み)」「Check(ブランクチェック)」「Read(読み出し)」操作は正しく機能しません。
- デバイスを認識するまで問題を探してください。
- ICSP接続は正しいですか?特にVpp端子とMCLR端子を取り違えていませんか?
- Vdd電圧の設定は正しいですか?
- VDDCOREピンがある場合、10uF の電解コンデンサを接続していますか?
- DISVREGピンがある場合、Vss に接続していますか?
- ENVREGピンがある場合、Vdd に接続していますか?
- ICSP接続ケーブルは短いですか?
- 書き込み対象のデバイスのVddピンやVssピンは1つとは限りません。すべて接続していますか?
- AVddピンやAVssピンがある場合、接続していますか?
●Windowsのバージョン
手持ちに環境がないため、Windows 2000上で動作検証していません。
Windows XP と Vista で動作検証しています。
Windows 2000上でdsPICerのデバイス選択ボックスが開かないとの報告を受けています。
原因は不明です。
"Detect" でデバイスを検出表示できるため、動作上の支障はないとのことです。
なお世の中に出回っているWindowsのバージョンは概ね、XP=72%、2000=12%、Vista=8%、98=1%、ME=1% 程度のようです。
XP, 2000, Vista の3つでほぼすべてという状況です。
Windows 2000 は急激に減少しつつあります。Windows 2008 の発表もあってのことでしょう。
●コンフィグレーション・ワードの書き込みエラー、ブランク・チェックでのエラー
書き込み照合(Verify)の最後で、エラーを検出することがあります。
例えば、PIC24FJ32GA002 の場合、次のようなエラーが表示されることがあります。
"エラー: 正しく書き込めません。"
"Prg 57FE:3F7F<-BF7F"
このメッセージの意味はプログラムエリアのアドレス57FEにBF7Fを書き込もうとしたところ、実際には3F7Fでした。
15ビット目が異なっていたことになります。
アドレス57FEはPIC24FJ32GA002のコンフィグレーション・ワード1のアドレスです。
PICの種類によりコンフィグレーション・ワードのアドレスは異なります。
PIC24FJ32GA002 のデータシートによれば、15ビット目は Reserved bit であり、常に 0 でなければなりません。
つまり、BF7F は誤りで 3F7F でなければなりません。
このままでも実害はないので、無視することもできます。
修正はMPLAB C30 のプログラム時にコンフィグレーション・ワードを正しく設定します。
同様に、ブランク・チェック"Check"実行時に、コンフィグレーション・ワードのアドレスでエラーを検出することがありますが、これは正常な動作です。
デバイス消去"Erase"を行ってもコンフィグレーション・ワードに Reserved bit などが含まれている場合、1 とはならず 0 となるためです。
つまりコンフィグレーション・ワードを消去しても FFFF にはならず、デフォルトで 0 のビットを含むことがあります。
●dsPIC30のプロテクト解除問題
(その後、ハードウェアの改良で対処しました。ハードウェア編をご覧ください。)
dsPIC30固有の問題です。これは開発当初から悩まされていました。dsPICerでは工夫を凝らしています。
現象としては、プロテクトをしているとチップイレースを実行してもプロテクト解除できないというものです。
dsPIC30のプログラム仕様書どおりではプロテクト解除(チップイレース)できません。
原因はdsPIC30の電源電圧不足です。
仕様ではVdd=4.5V以上でプロテクトを含めたチップイレースをできることになっていますが実際にはできません。
検証の結果、4.8V以上で確実にプロテクト解除できることがわかりました。
そこでdsPIC30の電源電圧を補うために、ショットキーダイオード(1S2)を追加しています。
これにより電源電圧を4.8V以上に保つことができ、プロテクト解除することができます。
もしプロテクト解除できない場合には、dsPIC30の電源電圧Vddを確認してください。
対策としてはショットキーダイオードをいくつか用意し、順方向電圧の低いものを選別して使用してください。
なお、消去操作(Erase)でプロテクト解除ができなくとも「消去動作」そのものは成功と表示します。 動作中にエラーは発生しなかったという意味です。
プロテクト解除が成功したという意味ではありません。
内容が消去されたという保証もありません。
プロテクト解除ができたどうかはコンフィグレーション内容を読み出し(Detect)て確認する必要があります。
本当に内容が消去されたかどうかはブランクチェック(Check)で確認する必要があります。
これは書き込み操作(Write)を行っても書き込み内容が保証されたわけではないのと同様です。
書き込み後を内容照合(ベリファイ)することではじめて内容が保証されます。
デフォルトでは書き込み後、自動的に内容照合します。
●処理速度向上について
ファームウェアとPC側の役割分担の最適化や、無駄な処理を取り払うなどのチューニングを施してきました。
これにより Ver 1.0から Ver1.2 の性能比で約4倍から約6倍改善されました。
あまりチューニングしすぎると安定性を犠牲にしてしまいます。
「USBシリアル変換ケーブルの通信速度限界」と「Windowsアプリの処理性能限界」があり、そろそろチューニングも限界に達しつつあります。
意外にもWindowsでは状況把握するために文字を表示したり、プログレスバーを表示するだけでも時間をロスします。
処理速度を優先してしまうと使いやすさを犠牲にしてしまいます。
今後は全体のバランスを考えつつ改善をします。
(C)2008-2009 All rights reserved by Einstein.
Version date 備考 1.9 2009-06-30 dsPIC33/PIC24のキャリブレーション保持対応 1.8 2009-06-25 64KBより大きいフラッシュメモリでReadの無限ループバグ修正 1.7 2009-04-30 拡張ICSP方式対応 1.6 2009-01-17 dsPIC30のプロテクト解除問題対策 1.5 2008-08-30 Programming Executive の読み書きに対応 1.4 2008-04-29 新デバイス対応 1.3 2008-03-16 新デバイス対応 1.2 2008-03-08 チューニング, ファームウェアも更新が必要 1.1 2008-02-28 内部ルーチンの整理, 処理の高速化, ファームウェアも更新が必要 1.0 2007-12-23 リリース, トランジスタ技術2008年3月号