dsPIC/PIC24ライタを作ろう(ソフトウェア編)

■ファームウェアの更新方法

初めにdsPICモジュールにファームウェアをロードしなけばなりません。
ファームウェアの更新に必要なファイルは5つです。
まずCQ出版社のページからTR0803W.zipファイルをダウンロードします。含まれている次の2つのファイルを使用します。
最新版のソフトウェアはこのページの「ダウンロード」にあります。
さらにトランジスタ技術2007年8月号付録のCDROMから次の3つのファイルを用意します。
すべをPC上の同じディレクトリに配置します。ライタとPCをUSBシリアル変換ケーブルで接続しておきます。
PC上の通信ポート番号を確認しておきます。Windows Vista の場合は、コントロール パネル->デバイス マネージャ->ポート(COM と LPT)で確認できます。
ファームウェアの更新手順は次のとおりです。

  1. 電源切り替えジャンパースイッチを5Vに設定します。
  2. dsPICモジュールのモードスイッチをLD側にして電源を入れます。
  3. dsPICモジュールの押しボタンスイッチSW1を押しダウンロード準備状態にします。緑LEDが点灯します。
  4. dsPICer.exe を起動し、USBシリアル変換ケーブルの通信ポートを選択します。
  5. PCソフトウェアからFile->Updateを実行します。自動的にDOSウィンドウが開き完了します。
  6. dsPICモジュールのモードスイッチをRUN側にします。


RS232Cの通信速度の切り替え問題

■拡張ICSP方式とは

Ver 1.7 からデフォルトで「拡張ICSP方式」を採用しました。 これにより、処理速度を大幅に短縮しました(PICkit2と同等程度です)。
「従来のICSP方式」を利用する場合は[Option]-[Enhanced ICSP]のチェックをはずしてください。
「拡張ICSP方式」とは次の動作をします。
  1. はじめに拡張ICSP用プログラム(Programming Executive(PE)モジュール)を「従来のICSP方式」でExecutive Code Memory領域に書き込みます。
  2. 書き込んだ「PEモジュール」を利用して高速処理を行います。処理に必要な転送データ数が減り、細かい処理をPEモジュールで行うため時間短縮になります。
  3. このため、PEモジュールが書き込まれていない場合、初期段階でPE書き込み処理が発生します。
  4. ブランクチェックや読み込みでもPE書き込みが発生することがあります。
  5. チップ消去を行うとPEモジュールも消去されます。
初期にPE書き込みを必要としますが、総合的に拡張ICSP方式のほうが有利です。特に書き込み容量が大きい場合、この差が顕著になります。
dsPIC30F2011(12KBytes)の全プログラム領域処理時間
-消去+書き込み+照合
従来ICSP方式14秒
拡張ICSP方式9秒
PIC24FJ32GA002(32KBytes)の全プログラム領域処理時間
-消去+書き込み+照合
従来ICSP方式34秒
拡張ICSP方式15秒
従来ICSPと拡張ICSPの処理時間比較例


●準備
拡張ICSP書き込みを行うためには、Programming Executiveモジュールを dsPICer.exe と同じディレクトリに配置してください。
具体的には以下のファイルをディレクトリ C:\Program Files\Microchip\MPLAB IDE\ICD2 からコピーしてください。 ●注意事項
現在以下のシリーズで拡張ICSP方式を利用できません。従来のICSP方式を利用してください。
またPEモジュールを書き込むとプログラム領域が消去されるという副作用があります(EEPROM領域は影響ありません)。

●メモリ構造
参考までにメモリ構造を示します。Executive Code Memory 領域は独立しており、通常動作に影響を与えない構造になっています。


■MPLAB C30 でのコード・オプティマイズ(最適化)

dsPICer.c をコンパイルする場合のテクニックです。
MPLAB C30 でコード・オプティマイズします。試用期間を過ぎると利用できません。
MPLAB IDE のメニューから Project -> Build Options... -> dsPICer.c
Categories: Optimizaton

デフォルトでは最適化なしの Level=0 になっていますので、Level=s に設定します。
MPLAB C30 は gcc をベースにしていますので、最適化オプションの意味もほぼ同じです。
大まかな意味は次のとおりです。

Level意味
0最適化なし、デバックなどで使用
1少しだけ最適化
2もう少し最適化
s処理速度とコードサイズをバランスして最適化
3コードサイズを犠牲にしても処理速度を優先して最適化
Level=0 と Level=s ではかなり処理速度が改善されます。

■PCソフトウェア

1.0では確実かつ安定に動作することを目的に作成しました。
1.1では内部ルーチンの整理と処理の高速化を行いました。
1.2ではチューニングし処理の高速化を行いました。
1.3では新しいデバイスを追加対応しました。
1.4では新しいデバイスを追加対応しました。
1.5では拡張ICSP用のProgramming Executive モジュール書き込みを可能にしました。
1.6ではdsPIC30のプロテクト解除問題に伴う調整を行いました。
1.7では拡張ICSP方式に対応しました。

Ver. 1.9b から 1.9c
追加対応したデバイス
dsPIC33FJ 256GP506A, 256GP510A, 256GP710A, 256MC510A, 256MC710A
PIC24FJ 32GA102,32GA104,32GB002,32GB004
64GA102,64GA104,64GB002,64GB004
128DA106,128DA110,128DA206,128DA210
256DA106,256DA110,256DA206,256DA210
128DB206,128DB210
256DB206,256DB210
64GA306,64GA308,64GA310
128GA306,128GA308,128GA310
PIC24HJ 256GP206A,256GP210A,256GP610A

Ver. 1.9 から 1.9b

Ver. 1.8 から 1.9

Ver. 1.7 から 1.8

Ver. 1.6 から 1.7

Ver. 1.5 から 1.6

Ver. 1.4 から 1.5
Programming Executive モジュールはディレクトリ C:\Program Files\Microchip\MPLAB IDE\ICD2 にあります。 (実はpe24f.hexとpe33f.hexは同じものです。)
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,128MC804
PIC24HJ 16GP304
32GP202, 32GP204, 32GP302, 32GP304
64GP202, 64GP204, 64GP502, 64GP504
128GP202, 128GP204, 128GP502, 128GP504

Ver. 1.1 から 1.2 dsPIC30F2011(12KBytes)の全プログラム領域処理時間
-書き込み消去+書き込み消去+書き込み+照合読み出し+ファイル
Ver1.25秒8秒16秒13秒
PIC24FJ32GA002(32KBytes)の全プログラム領域処理時間
-書き込み消去+書き込み消去+書き込み+照合読み出し+ファイル
Ver1.214秒15秒39秒34秒

Ver. 1.0 から 1.1 dsPIC30F2011(12KBytes)の全プログラム領域処理時間
-書き込み消去+書き込み消去+書き込み+照合
Ver1.024秒31秒103秒
Ver1.111秒14秒28秒
PIC24FJ32GA002(32KBytes)の全プログラム領域処理時間
-書き込み消去+書き込み消去+書き込み+照合
Ver1.058秒62秒263秒
Ver1.127秒29秒70秒
※実際には無駄な書き込み、無駄な照合を省略するので、上記処理時間より短くなります。

■動作確認方法

まず、ハードウェアに誤りがないか確認してください。初歩的なミスになかなか気づかないものです。
(1)dsPICer.exe を起動し、"Connect" を実行します。
(2)次に "Detect" を実行します。

■よくある質問

●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では状況把握するために文字を表示したり、プログレスバーを表示するだけでも時間をロスします。
処理速度を優先してしまうと使いやすさを犠牲にしてしまいます。
今後は全体のバランスを考えつつ改善をします。

■ダウンロード

■履歴

Versiondate備考
1.9c2010-09-18新デバイス対応
1.9b2009-10-24レジストリ問題修正、Windows 7動作確認
1.92009-06-30dsPIC33/PIC24のキャリブレーション保持対応
1.82009-06-2564KBより大きいフラッシュメモリでReadの無限ループバグ修正
1.72009-04-30拡張ICSP方式対応
1.62009-01-17dsPIC30のプロテクト解除問題対策
1.52008-08-30Programming Executive の読み書きに対応
1.42008-04-29新デバイス対応
1.32008-03-16新デバイス対応
1.22008-03-08チューニング, ファームウェアも更新が必要
1.12008-02-28内部ルーチンの整理, 処理の高速化, ファームウェアも更新が必要
1.02007-12-23リリース, トランジスタ技術2008年3月号
(C)2008-2010 All rights reserved by Einstein. inserted by FC2 system