PIC18F系 の開発
- 特徴
PIC18F14K50/2550 は USB 対応でありながら、非常に安価です。また、開発ツールも Microchip から無料で入手可能です。 - 開発環境
最近の開発ツール MPLAB-IDEXは Windows だけではなく、Mac, Linux にも対応になりました。使い慣れた環境ですぐに開発を始めることが出来ます。- MPLAB-IDEX
MPLAB-IDEX は Microchip の純正の開発環境です。沢山の解説が Web で見つかりますので、ここでは割愛します。
- MPLAB-IDEX
- Bootloader
PIC18F14K50/2550 に予め Bootloader を書き込んでおくことにより、PICWriter を使わずにユーザのプログラム(ファームウェア)を書き込むことが出来ます。Bootloader には大きく分けて、HID を利用したものとバルク転送を利用したものとがあります。このバルク転送を利用したものを今回は使用します。- Bootloader (PIC18F14K50)本体
Bootloader の本体はこちらの方が開発されています。ターゲットに合わせて、Bootloader の起動方法の変更が必要になる場合があります。- 改造方法
ターゲットで用いているスイッチに合わせて Bootloader のコードを変更すると、新たにスイッチを設けなくても Bootloader の機能を利用出来るので便利です。ここでは改造例として、当社で製品化した「英数/かなキーボード」で説明します。- 改造前
オリジナルのコードは Port C2 を起動時に読み取るようになっています。1234if(PORTCbits.RC2 == 1) // If not pressed, User Mode{_asm goto RM_RESET_VECTOR _endasm} - 改造後
英数/かなキーボードの場合は、スイッチを両方押して、電源投入した時に Bootloader が起動するようにします。1234if(PORTBbits.RB4 == 1) || (PORTBbits.RB5 == 1)) // If not pressed, User Mode{_asm goto RM_RESET_VECTOR _endasm}
- 改造前
- 改造方法
- ファームウェア
ユーザが書き込むプログラムファームウェアとしてビルドします。それぞれの Bootloader で割り込みベクタが異なっていますのでそれに合わせて設定します。最近のサンプルでは #define 文で定義しておけば、そのままベクタが設定されるようになります。123456789101112131415161718192021222324252627282930/** VECTOR REMAPPING ***********************************************/#if defined(__18CXX)//On PIC18 devices, addresses 0x00, 0x08, and 0x18 are used for//the reset, high priority interrupt, and low priority interrupt//vectors. However, the current Microchip USB bootloader//examples are intended to occupy addresses 0x00-0x7FF or//0x00-0xFFF depending on which bootloader is used. Therefore,//the bootloader code remaps these vectors to new locations//as indicated below. This remapping is only necessary if you//wish to program the hex file generated from this project with//the USB bootloader. If no bootloader is used, edit the//usb_config.h file and comment out the following defines://#define PROGRAMMABLE_WITH_USB_HID_BOOTLOADER//#define PROGRAMMABLE_WITH_USB_LEGACY_CUSTOM_CLASS_BOOTLOADER#if defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER)#define REMAPPED_RESET_VECTOR_ADDRESS 0x1000#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x1008#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x1018#elif defined(PROGRAMMABLE_WITH_USB_MCHPUSB_BOOTLOADER)#define REMAPPED_RESET_VECTOR_ADDRESS 0x800#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x808#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x818#else#define REMAPPED_RESET_VECTOR_ADDRESS 0x00#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x08#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x18#endif#if defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER)||defined(PROGRAMMABLE_WITH_USB_MCHPUSB_BOOTLOADER)
- Bootloader (PIC18F14K50)本体
- 書き込みツール
上記で作成したファームウェアを書き込む PC側のソフトの設定を行います。ここでは Windows と Macintosh/Linux の Unix 系 OS の説明をおこないます。- Windows
Windows は少し面倒です。ブートローダの起動状態では、オリジナルの Microchip のデバイスとして Windows では認識されています。そのためこれに対応した ドライバが必要になります。最初のブートローダモードではドライバを読み込ませて、Windows に認識させる必要があります。ドライバの組み込み後に、書き込みソフトウェアでファームウェアを書き込みます。 - Macintosh/Linux
Mac/Linux などの Unix 系の OS では fsusb で書き込みを行います。fsusb を使うためには、libusb と呼ばれる USB をユーザ領域で使うためのシステムが必要になります。基本的に自分でソースからビルドすることになります。自分でビルドする環境がない人もいるかと思いますので、as is でビルドした成果物を載せておきます。as is ですので、動作保証はできません。Macintosh のみの対応になります。Linux な人々はビルドするのは日常茶飯事だと思いますので。- libusb
usb をユーザランドで使うためのシステムになります。最近のlibusb は1.0.x 系列なのですが、fsusb では 0.1.x 系列が必要です。このため、libusb-comat のバージョンの違いを吸収するレイヤー相当のシステムを導入する必要があります。Macintosh の場合は Homebrew で簡単に導入することが可能です。こちらを導入すると、libusb の対応したバージョンも自動で導入することが出来ます。 - libusb-compat
1brew install libusb-compat - fsusb
こちらから入手可能です。libusb の導入が終わっていれば、make 一発でコンパイル終了です。
- libusb
- Windows
- 参照先
以下のサイトを参考にさせて頂きました。 - 謝辞
上記の方々をはじめ、各方面から協力をいただきましたこの場を借りてお礼申し上げます。