SPI-ROMの使い道がいまいち…

DDT誌に勧められるままに購入し、取り付けたSPI-EEPROM(M25P40)ですが、Lattice
の石はチップ自身にコンフィグROMが内蔵されているため、コンフィグ速度が遅い
外付けのSPI-ROMはぶっちゃけ出番がありません。しかも書き込み方法がispVMから
ではないとできないのでやっぱり使い道がありませんorz。
でもせっかく買っちゃったのでそれっぽく使ってみることにしました…。


20110527追:
ispVMがFT2232デバイスに正式対応になりました!
もちろん外付けSPIROMの書き込みも可能です!!



















SPI-ROMの書き込み方法はispVMを使用しJTAG経由でSPI通信を行って
行うわけですが、私はJTAGkeyしか持ってないので(コンフィグもSVFでやってるし)
それと同等の機能を持つソフト経由で書き込む必要があります。
酔漢氏が作成されたasagaoはズバリそのものな機能があってこちらを
使わせていただくことにしました。


以下の検証内容はこちらの記事で紹介してることが全て出来ていることが前提です!
それとSPI-ROMは付けとくように!


基本的な操作方法はasagaoのマニュアルに従ってくだい。
また、一番難解なLFXP2_5E用のターゲット設定ファイルは、
私がすでに作成していますのでこちらを使用してください。

※USE AT YOUR OWN LISK

うー
設定ファイルを読み込み、"Target Device"を"CQ-FRK-LXP2"に設定すると、
ちゃんとJTAGのチェインが繋がっていれば上記画面のように表示されます。


うー
"detect"ボタンを押したところ。SPI-ROMのIDを読みだし表示できています。
ここまできたらあとはもう書いたり消したり自由自在です。
勝ったっッ!(愚地克己顔で)


うー
"Erase All"したところ。


うー
適当なhexファイルを選んで書き込み。残念ながら最速の6MHzでも遅い。


うー
書き込み完了。Blank Checkもちゃんと機能しています。



…これでSPI-ROMを無駄にしなくて済みましたが、こいつの実際の使い道…
どうしましょうか…
コンフィグ用途に使用するのは(内蔵フラッシュと比べて)遅いし、この基板の
コンフィグモードだとコンフィグ後はCCLKがユーザI/Oとして使用できなくなる
(=自由にSPIROMにアクセスできなくなる)ので基板をリワークしてセルフダウンロード
モードにするか、もしくはCCLKピンと別のGPIOとを直結してやる必要があります。
I/O数は有り余っているのでSPI-ROMを使い倒したい方は後者の方法がベストでしょう。

LPC2388でUSB-MSC(MassStorageClass)を使う2

やっぱ難しいやUSBって…



前回はLPC2388でMCI経由で動く"だけ"の物をこしらえてました。ですのでつぎ
はぎだらけのがかなりいい加減でしたがここ1週間(1作業日)で自分なりに流れが
理解できる構成に変えました。これはUSB-CDCで行ったのと同じものです。
debug出力はフットプリントが少ないchan氏のxprintfに替え、かつ動作クロックを
48->72MHzに上げて、んでもってUSB接続で時折コケてた部分を修正してます。

肝心の機能の方は…MMC,SD,SDHC(4GBまで)対応で、LPCUSBが唱っている最大
250kb/sの読み書きもおこなえているようです。
SDカードをいくつか試してみると、容量の少ない物だと上記の速度で読み書きが
行えるのですがSDHCみたいな大容量のものだと半分以下の速度しか出ない事が
分かりmp3ファイルとか移動するときは速度が足らなくて不便に感じます。

あとMCIのドライバはESFLの物を流用させてもらっています。しかしこれはDMAを
使用していません。DMA使えたらSDHCとかでもう少し速度が改善できるんじゃ
ないかなと思っています。

すでに泥沼にはまっている気がしてますが違う事やろうとするとUSBはやっぱし
難しいですね…。まだまだW.I.P.なソースはこちらに
ご使用は自己責任+ご意見無用でお願いします。

ついでにですが先に紹介したchan氏のLPC2388向けmciアクセスプログラムの
FatFsR0.07c+RTC適用版で相対パスのオプションを有効にしてコンパイルすると
正しく動作しなかったことが分かったので修正版をあげてます。
MCI_OLED

LPC2388でUSB-MSC(MassStorageClass)を使う1

"有益=ソースコードそのまま流用できる"なんて根性でやってると痛い目にあいます。
ええ確実に。…そんな根性をしていた時期が…私にもありました(刃牙顔で)
重箱の隅までは理解しなくてもいいけど最低限どうやって桶屋が儲かってるのかくらい
は知っておいた方がいいとおもいますよマジで!CQ誌提供のGCCサンプルソースとかも
(ワザとじゃないだろうけど)明確な間違い仕込んでたりしてますんで遊びであっても
くだらないことで時間や金を消費しないように気をつけましょうというお話。
とくにLPC2388は…、

.org 0x1fc
__: .word 0x43218765

のたった二行をスタートアップに仕込まれただけで文字通りゴミ基板になるしでも
こんなあくどいことするやつさすがにいないだろけど…私はそんなことしないよ?…ふふふ





…さて本題、ここ最近はLPCUSBを使用してUSB Mass Storage Class(以下MSC)をLPC2388
で何とか実現できないかと模索しています。SPIアクセスのサンプルはすでにあるのですが、
せっかくSDIO(MCI)があるのでこれで使えるものにしていこうかな、と。

現状こんな感じです。
うー
なんか微妙な…ディスク容量が…うまく表示されてない…
うー
SDHCも認識できているようです。が…実際の動作は??

このMSCをchan氏のmp3プレーヤーと結合させてSDカード取り外さずにデータ書き込め
たら手間が省けてうれしいのですがはてさて…
WorkInProgressですがソースも置いときます。検証段階ゆえに自己責任+ご意見無用で…。
次回に続く

現状USB関連の書籍を買ったり借りたりしておべんきょ進めてますが…私はぶっちゃけ
おべんきょとセンセイが大嫌いです…しかしUSBを必ず物にして恐怖症を克服したいです…



追:
OpenOCDのWindows用実行形式ファイルがftdiのライセンスがらみでダウンロードできなく
なってしまいましたが、ZUS氏がビルド方法の詳細な解説をされています。
私も氏のページを参考にビルドしたもので書き込み・デバッグ・メモリダンプができるのを
確認しました(OpenOCD ver 0.3.0 r2578)。また、JTAGkey互換デバイスを使っているのなら
ベステクさんところで配布してるバイナリを使わせてもらうという手もあります。
追2:
OpenOCDのソースはsvnではなくgitを使用して取得するようにしてください。

XBeeを試す

気がつけばもう8月…月日が経つのは早いです。私はと言えば先日虹裏でスレを立てた
直後に寝堕ちという不名誉な最短記録をおっ立ててしまい軽い自己嫌悪に陥ってました。
それでも参加してくれた皆さんには本当に申し訳ないと思います。お詫びにいなちゃん
があっちの皆さんに目の保養をさせていただくことになるでしょう…
(これ目的でわざとやってるわけじゃないよ!)






5月に買ったおもちゃ達もだいぶ消化出来てきました。残りは今回紹介するXBeeと、
ねむいさんがやるやる詐欺でほったらかしてきたAT91SAM7S256のプロトボードを残す
のみとなrまた前振り長くなりそうだからさっさと本題

現時点では、スイッチサイエンスさんと秋月さんから容易に購入出来るXBeeですが、
使用記などもネット上に豊富にあります。Arduinoと接続した使用例が特に多いですね。
せっかくなので私はLPC2388とSTM32のそれぞれのUARTから使用してみました。STM32
(CQ-STARMの)基板はただのVCPとして動作させ、LPC2388はUART0はそのままにUART1で
XBeeの通信をさせるように
してます。今回はLPC2388のUART1の使用実験も兼ねています。

うー

二つ用意したXbeeはデフォルトではtransparent mode,9600,n,1になってるので先ず
STM32,LPC2388のボーレートもそれに合わせて試しました。9600bpsでは特に問題なし。

次にボーレートをあげて通信を試みましたが、事前に読んだマニュアル中に、"コマンド
「ATBD7」で設定できるのは115200bpsではなく実際は111111bps。non-standard-rates
で設定すると)「ATBD1C200」)正確な115200bpsで設定できる"と記述があります(超意訳)。
さらに"XBeeで使用されるRFパケットの通信レートが250kbpsの為、高いボーレートで
通信する時にデータの取りこぼしをなくす為にフロー制御が必須、フロー制御無しで
取りこぼし無しに通信したければ十分低いボーレート(たとえば9600bps等)で行うこと。"
とも書いて有りました(超意訳)。

つまり115200bpsでフロー制御無しで文字列垂れ流しやると100%失敗するようなので
試してみると案の定大失敗orz57600,38400bpsだとかなり安定してきますがそれでも
たまに文字が落ちます。結局transparent mode下ではフロー制御無しでお手軽に確実
に使えるのは19200bpsあたりまでということが分かりました。
(注:XBee本体とお話しするだけなら115200bpsでも別に問題はないです。)
digiのフォーラムにはstopbitを2にすることで115200bpsでも通信が可能になったみ
たいなこと書いてありましたが真似してやってみましたが駄目でしたクソァ!
…まだ"さわり"で動かしたの段階なのでマニュアルを熟読してリベンジですね。

まぁ大量のデータをバリバリ流すなんてことは全く考えてなくて遠隔地にあるセンサの
値を読む程度の使用と想定してますので低いボーレートでも気にはなりませんが…
あとこれ結構電流喰うんですよね(50mA)。バッテリーで使うならデータフロー制御
よりこちらの電力制御の方が最優先でしょう。

Go to top of page