LPCXpresso LPC1769にMARY拡張基板を乗せる
トラ技別冊小型ARMマイコン基板(MARY)用の拡張基板をLPCXpresso LPC1769で使えるようにしました。MARY拡張基板のコンパクトさを生かして、OLEDディスプレイ基板(OB)と無線モジュール基板(XB)をLPCXpressoの上に乗っけてみました。
裏面の写真です。主にUEW線を使って配線しています。配線に加え、裏面にピンヘッダを取り付けてLPCXpressoとの結合を行っています。
LPCXpressoとの接続
秋月さんの140x40mm両面スルーホール基板を使って、LPCXpressoの上に拡張基板を搭載しました。搭載モジュールと接続先は以下の通りです。
搭載モジュール | LPCXpressoの接続先 |
OLEDディスプレイ(OB基板) | SSP1(P0.6~P0.9) RESET(GPIO P0.23) OLED_VCC_ON(GPIO P0.24) |
加速度センサー(OB基板) | I2C1(P0.0~P0.1) MEMS_INT(GPIO P0.25) |
XBee(XB基板) | UART3(P0.10~P0.11) RESET(GPIO P2.0) |
micro SDカード(XB基板) | SSP0(P0.15~P0.18) INSERT(GPIO P2.1) |
USB-シリアル変換(FT232RL) | UART0(P0.2~P0.3) |
Ethernet | J6-32~J6-35 |
ISPジャンパー | P2.10 - GND |
MCUリセットSW | J6-4 - GND |
外部電源(5V)コネクタ | J6-2, J6-1 |
IDEからのプログラム転送ができなくなった際(例の" load failure: Et: Flash driver not ready"が出た場合)の復旧用に、ISPジャンパーとリセットSWは必須アイテムです。
LPCXpressoは5Vの出力ピン(mbedの5V USB out相当)がないため、OLEDなどの駆動用に外部の5V電源が必要です。電源コネクタの取り付けが今一でした(変換アダプタを使わずに、基板に穴を開けて直接半田付けした方がよかったな・・)。
LPC17xx用のドライバ
連休を費やしてXBee以外のモジュールは動作を確認できました。使用したドライバ類は以下の通りです。
モジュール | ドライバ |
OLED | MARY(LPC11xx)用のドライバを移植 |
加速度センサー(MEMS) | MARY(LPC11xx)用のドライバを移植 |
micro SD / FatFs | ChaN's FAT-Module with LPC17xx SPI/SSPを移植 |
Ethernet/TCP/IP | nxp\lpcxpresso_3.6\Examples配下にインストールされるRDB1768cmsis_uIPを使用 |
- OLED/MEMSはLPC11xxとLPC17xxレジスタ関連の差分を直す程度で動作。ペリフェラルの初期化部分は最新のCMSIS Peripheral Libraryベースに書き換え
- FatFsは Olimex LPC1766-STKがベースになっているところをLPCXpresso用に修正(SSP1→SSP0に変更など)。本来は、MARYドライバの移植より楽な筈ですが、そのまま拝借も芸がないため、最新のCMSIS Peripheral Libraryを使ったところ結構修正が出ました。オリジナルはCMSIS v1.0を使っている(ファイルも一緒に配布)のですが、最新のv3.0では廃止されたAPIがありその部分の書き換えが発生しました
- uIPはLCD表示部分をOLEDに変更。uIP本体は無修正で動くため、移植は簡単
おわりに
久しぶりに基板の配線を行いましたが、配線ミスとの戦いでした。最初は、LPCXpressoのピン配置図(回路図の最後のページ)に搭載モジュールのピン番号を書くだけで作業を始めたのですが、ピン数が多いのと裏面配線のため作業がはかどらず、途中から裏面から見たピン収容図を画くことで対応しました。準備に時間がかかっても実体配線図などを作ってから作業に入ったほうが結果的に作業が早くなりますね。それでも以下のミスを連発してトホホでした。
- Ethernetマグジャック(Sparkfanのピッチ変換基板を使用)とFT232RLをLPCXpresso J6コネクタ2本の間に乗っけたのですが、最初に直接半田付けした後で配線スペースがないこととに気がつく。おかげで結構窮屈な配線作業を強いられるはめに
- マグジャックもSparkfanのものを使ったのですが、ピン配置を秋月のジャックで行ってしまう。Ethernetが繋がらないところまで行って、両者のピン配置が違うことに気がつきやり直し。パルストランス中点につけたコンデンサは再度取り付ける場所がなく割愛することに。まあ、線長が短い場合はコンデンサなしでも問題ないのですが・・
- ISP用ピン(P2.10)の位置を間違う。J6-51に配線するべきところを、お隣のJ6-50に配線。何度か書き込みができなくなった際に、ひたすらリセットを繰り返していた。"Flash driver not ready"が出て不安定になっている状態でちゃんとISPモードに落ちていなくても、何回か繰り返すと書き込みに成功することがあったんですね。そのため配線ミスと分かるまで時間を要した
生のSPIやI2CをLPC17xxで触るのは始めてでしたが(mbedのSPIくらいは使ったことがありますが、あれはハードに直接触っているとは言えない抽象度なので)、こちらはそれほどはまることもなく通過できました。Arduinoで一通りはまる通過儀礼を行った甲斐があったというものでした。
各モジュールの動作確認結果は別途ポストします。
« Debug printf用の可変長引数マクロ | トップページ | LPCXpresso LPC1769でFatFsを動かす »
「NXP-ARM」カテゴリの記事
- LPCXpresso IDEでのC++コードサイズ肥大化の対策(2011.10.15)
- XBee APIモードライブラリのLPCXpressoへの移植(2011.10.09)
- LPCXpresso LPC1769でFree RTOSを使う(2011.07.27)
- LPCXpresso LPC1769でFatFsを動かす–USB Host編(2011.07.19)
- LPCXpresso LPC1769でFatFsを動かす - DMA編(2011.05.14)
コメント
この記事へのコメントは終了しました。
« Debug printf用の可変長引数マクロ | トップページ | LPCXpresso LPC1769でFatFsを動かす »
Todotaniさん、はじめまして!
LPCXpressoとFatFsを使ってSDカードへの書き込みを試したいと思い、大変参考になります。
もし宜しければ、スルーホール基盤を介して、LPCXpressoと拡張モジュールをどのように接続しているか見せていただけないでしょうか?
投稿: water | 2016年1月10日 (日) 03時40分
waterさん、
古い記事でメンテができておらずすいません。
基板裏面の写真を本文に追加しました。こんなのでよかったでしょうか。
投稿: Todotani | 2016年1月10日 (日) 08時10分