mcc18 の変更点
[[2009-08:http://psp.dip.jp/web/log/2009-08.html]] [[PIC日記:http://psp.dip.jp/web/log/2009-05PIC.html]] [[PIC18F2550]] [[PIC18F4550]] [[HIDmon-2550]] [[HIDmon-14K50]] [[sdcc]]
----
**MicroChip C18 Compilerを使いこなす [#qdd17ecb]
-MicroChip C18 Compiler は評価版と称して事実上無償配布されています。((これは適切な表現ではありません。))((Lite版は無償無期限で使用できます。評価版は60日だけ使用できます。期限の切れた評価版はLite版と同等の機能に格下げになります。))((評価版はVerup版が出るたびに古いものをアン・インストールして、インストールしなおすことが出来るので、改版のタイミングから2ヶ月は最適化ありの状態で使用できるといった具合です。))((Lite版と、期限の切れた評価版は最適化なしになりコードサイズが2割以上大きくなりますが、))((それ以外の制限は無く普通に使用できます。そういった意味では無償配布です。))
-MicroChip が用意しているUSBアプリケーションフレームワークは、基本的に C18 Compilerでコンパイルできるように記述されています。
-しかし、普通のMakeが通りません。Makefileも整備されていないようです。
http://psp.dip.jp/web/jpg/PIC/14k50.jpg
-MicroChip が用意しているUSBアプリケーションフレームワークを[[sdcc]]に移植するのは茨の道です。MicroChipのバージョンアップに追いつけません。
-現状、[[sdcc]]はCコンパイラとしての基本性能に問題があります。もちろんC18にも問題はあります。
--結局、どちらがましか、という議論になると、C18のほうがましであるという結論に達しました。
[[Audinさんのサイトのまとめ記事:http://avr.paslog.jp/article/1187467.html]]が非常に参考になります。
----
目次
#contents
----
*とりあえず、Make環境を整備。 [#i4b38a52]
■ ビルド環境の構築の手引き
(1)
まず、WinAVR(GNU Make) をインストールします。
http://sourceforge.net/projects/winavr/
インストール先は、通常なら C:\WinAVR\ になります。
WinAVR/utils/bin には、make.exe 以外にもunixシェルでよく使用する ls や cat , rm
などといったお馴染みのツールのWin32バイナリーが含まれているので、非常に便利です。
(2)
次に、mcc18(Compiler)をインストールします。Standard-Eval VersionでOKです。
http://www.microchip.com/
URLはその都度変わると思いますが、ここです。
-http://www.microchip.com/Developmenttools/ProductDetails.aspx?PartNO=SW006011
-一番下にある |>Documentation & Software を展開すると、ダウンロードリストが出ます。
インストール先は、通常なら %%C:\mcc18\%% になります。
- ---> C:\Microchip\mplabc18\v3.47\ あたりになります。
(3)
続いて、MicroChipのサイトから、下記USBアプリケーションライブラリ、
MicrochipApplicationLibrariesv2009-07-10.zip
もしくはそれより新しいバージョンを入手してください。
URLはその都度変わると思いますが、ここです。
http://www.microchip.com/microchip.www.securesoftwarelist/whatsnewsoftware.aspx?lang=en
-http://www.microchip.com/pagehandler/en-us/devtools/mla/
-Legacyの隣にある、Archivesのタブを開くと古いバージョンが入手できます。
準備が出来たら、パスを通します。
・パスの通し方:
PATH %PATH%;C:\mcc18\bin;C:\mcc18\mpasm;C:\WinAVR\utils\bin;
~~~~~~~~~ ~~~~~~~~ 下線部はmcc18のインストール先に応じて読み替えてください.
適当なバッチファイルを用意して呼び出すか、あるいはWindowsのシステムプロパティ
-->詳細-->環境変数-->ユーザーの環境変数
PATH に C:\mcc18\bin;C:\mcc18\mpasm;C:\WinAVR\utils\bin
を記述します。
インストール時にパスを通してしまった場合は、上記確認のみで結構です。
''ダウンロード''
-[[mchip-hidboot.zip:http://psp.dip.jp/web/upload/PIC/mchip-hidboot.zip]]
-内容は[[千秋ゼミさんのサイト:http://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?AVR%2Fnews43]]に登録されているHIDBoot-14k50.zip とほぼ同じです。(千秋さん、ありがとうございました。)
-Makefileを少し変更して汎用性を持たせてあります。
-ReadMe.txtドキュメントを追加しました。
''これでやっとC18が使えるようになります''
-今まではC18でのビルド方法が全く不明(GUIは苦手です)だったのでどうすることも出来ませんでした。
~
~
~
~
----------
*CDC Serial Emulatorをビルドできるようにしたい。 [#ba034a32]
出来ました。
''ダウンロード''
-[[mchip-cdc14k.zip:http://psp.dip.jp/web/upload/PIC/mchip-cdc14k.zip]]
-PIC 18F14K50 をUSB-シリアル変換チップとして使用するためのファームウェアです。
-そのまま外部PICライターで焼いてよし、HIDmonブートローダーで書き込んでもOKです。
-コードはMicroChipオリジナルのままなので、19200以上のボーレートでの使用に若干不安があります。(未評価です。どなたか評価してみてください)
-USBのポーリングとRxDデータのポーリングを交互に呼んでいるだけの構造なので、USBのパケット処理中にRxDデータが2バイト以上来るとハードウェアのUSART FIFOが溢れます。
-19200bpsは1秒に約2000文字のレートでシリアルデータが流れますので、2文字時間=1mSすなわちUSBの1フレーム相当になります。USBバルク転送が1フレームに1回は出来るはずなので、19200bpsで溢れることはないでしょう。
-しかし、その上の57600bpsでは2文字時間=0.3mSになるので、怪しいことになります。
-%%RTS/CTS/DTR/DSRなどの端子のサポートがありません。%%
--よく調べたらありました。こいつです。この行のコメントアウトを取ります。
usb_config.h:130:#define USB_CDC_SUPPORT_HARDWARE_FLOW_CONTROL
--DTRはRB6に割り当てられていました。
--ANSELHのゼロクリアは行われていました。
--UART_DTRの制御コードは書かれていました。
--しかし、RB6はHi-Zのままでした。
--UART_TRISDTRとUART_TRISRTSを0(出力)にセットするコードがどこにもありません。
-%%つまり、ハードウェア・フロー制御のサポートもありません。%%(接続先のAVRチップなどにもないので、不要と言えば不要です。)
--あるにはあるのですが、MicroChipのソースのままでは機能しません。
usb_config.h:130:#define USB_CDC_SUPPORT_HARDWARE_FLOW_CONTROL
-を有効にしても、バグにより機能しません。
-CTS,DSRは見てないような・・・。
~
~
~
~
----------
* -*-勝手に改蔵-*-勝手に改蔵-*-勝手に改蔵-*- [#rcb8b02e]
Serial Emulator : DTR/RTS出力可能版
''ダウンロード''
-[[mchip-cdc14k2.zip:http://psp.dip.jp/web/upload/PIC/mchip-cdc14k2.zip]]
DTR信号をRB6端子に出力します。
~
~
~
~
----------
*PICのボーレート計算式 [#taac70ff]
48,000,000 12,000,000
baud = ------------------------- = ------------
4 x ([SPBRG:SPBRGH] + 1) (UBRR + 1)
http://psp.dip.jp/web/jpg/PIC/baud.png
-つまり、115200bpsでも分周レジスタは103であり、
-230kbps,460kbps,920kbpsくらいまでは楽勝のように見える。
-UBRR(と勝手に命名)を11にしたときに丁度1Mbps,5で2Mbps,1で6Mbps(!)
-まだまだいけるじゃん。
-しかしSerialEmulatorのファームは115200以上はエラー扱いにしている。
-(つまり115200まではこのファームでいけると言うのか???)
~
~
~
~
----------
*Bootloader-Tips [#w80ed5f9]
USB付きPIC18F用のBootLoaderは、今のところ4種類程度存在します。
-(1)MicroChip純正Bootloader(C18)
-(2)MicroChip純正HID Bootloader(C18)
-(3)diolan社がGPLで公開しているHID Bootloader(MPASM)
-(4)このサイトで公開している [[HIDmon-2550]]/[[HIDmon-14K50]](MPASM)
この4者は(残念ながら)''互いにプロトコルの互換性がありません。''
-(1)のみ、Windowsへのドライバー組み込みが必要です。(唯一、バルク転送を使用します)
--(1)以外は、HIDデバイスなのでWindowsへのドライバー組み込み不要です。
-(2)のみ、ブートローダーのサイズが4kBになります。他は2kBに収まっています。
-(3)はPIC-18F4455のみサポートで14K50などには対応していません。
--また、転送プロトコルを暗号化する機能があります
-(4)は18F2550/18F4550/18F14K50の3種類をサポートしています。
--bootloader機能以外に''PIC BIOS(printデバッグ)機能や、HIDmon(汎用USB-I/O)としても使用できます。''
~
~
~
~
----------
*Bootloader-Tips2 [#t68f9553]
アプリを書くときは当然エントリーアドレスと割り込みベクターを使用すると思いますが、
以下のように工夫することで、ブートローダー使用と単独書き込み実行の両対応が可能です。
-エントリー
ORG 0
GOTO 0x800
-割り込み
ORG 8
GOTO 0x808
ORG 0x18
GOTO 0x818
-実際のプログラムコード
0800: プログラムエントリー番地
0808: 割り込み処理0008のエントリー
0818: 割り込み処理0018のエントリー
・・・・
3fff: 最大ここまで(18F14k50).
-ブートローダーは0x0000〜0x800に常駐しています。
-ブートローダーがアプリを書き込むときは自分自身と重なるアドレスのデータを無視します。
-PICkit2などの外部ライターで書き込むときは全領域を書き込んでくれます。
実際には、割り込み発生時に1命令だけ無駄なジャンプが発生しますが、そのかわりに公開するHEXファイル
は1種類で良いので混乱が少ないです。
ブートローダー(2)を使用する場合のみ、プログラムコード開始番地を0x1000〜に移動する必要があります。
~
~
~
~
----------
*番外編: mcc18をLinuxで動かす。 [#z6f9375e]
あまりお勧めできない方法ですが・・・。
-[[mcc18をLinux上で動かす。:http://psp.dip.jp/web/log/2009-09.html#v0d65843]]
~
~
~
~
----------
*参考リンク [#zfbe3d2d]
(PICマイコンの小部屋)USB開発環境の構築
-http://www.mars.dti.ne.jp/~m7030/pic_room/usb_tool/
-
電気実験室
-http://www.geocities.jp/ii2duck/personal/s0744.html
~
~
~
~
----------
*予定 [#l7b89e5a]
-汎用libusbデバイスのフレームワークもビルドしたい。