2013-04
2013-03 FM3 RX62N SH2A PIC32MX
4月
- 先月も、秋月PIC32MX220F032B用のブートローダーを作っていた。
- 作ったといっても、UBW32用のHIDBoot.Xを少し改造しただけ。
- read more : PIC32MX
R16用のアセンブラとエミュレータ。
- 一応ある程度使えるフレームワークになったので、別のアーキテクチャーのエミュレータやアセンブラにも流用できる(と思う)
- 今のところ16bit/Wアーキ固定になってるけど、改造はそんなに大変じゃない。
- R16は電子ブロック工房さんみたいに、FPGAとかでちゃんとエミュレーションして評価してから回路組めばもっといいものが作れるのに、と思ってしまうことがある。
- ターンアラウンドタイムの劇的な短縮って、とても重要だよね。(Y/y)
- FPGAの論理合成タイムって、どのくらい掛かるんだろうか。
- FPGAに手を出せないでいるのは、ここに時間が掛かることと、論理合成ツールが評価版だったり高価だったりすることと、特に作りたいものがないこと、かな。あと、作っても使う場面が無くて自己満足かお勉強だけで終わってしまうから。(普通のCPUだって、似たような感じはするけど)
持ち越し案件
- pic32mxでFTDI互換(JTAG)ファーム --- あとまわし。
pic32mxでUSBオシロ
- WinUSBの初期化コードを書いた。
- WinUSBは資料やサンプルコードが少ない。あとWinXPで大丈夫か?
- Linuxに流用できないという困った点がある。けれどLinux版は需要が無い(WinUSBを使うまでもない)ので大丈夫だ。
- Windowsで無理やりやってるから(LibUSBだとドライバー導入に難点があるので)WinUSBを使おうとしているところ。
PIC32MXでWinUSB(高速バルク通信)
- 書き中。
- Windows側のusbOpen(),usbWrite(),usbClose() (いずれもPinguinoのmphidboot用語の関数)のバルク通信モード版は書いた。
- ファームはまだこれから。
ちなみに、MinGW gccでWinUSBを使ってる例は皆無のようだ。(ググッても出てこない)
そういえば、Interface誌5月号を買った。BlueTooth特集だった。
- けれど、一番興味を引いた記事は圓山さんの、台湾発のCPU、AndesCoreだ。
- ARMに正面から挑んでいて、すでにARMを超えている(コード効率で)。面白い。
- BUSはAMBAなんだな。MIPSでもそうだけど。
- 日本では、もうこんなことに挑戦できる人|会社が居なくなっているのは寂しいなぁ・・・
PIC32MXでWinUSB(高速バルク通信)
- 一応モニターのソースまでビルドしておいた。
- ダウンロード:USB簡易モニター
- WinUSB側も、たまたまうまく(?)作れたlibwinusb.a をリンクするとうまくいった。でも、もう二度とうまくいく.aは作れない。
- 失敗例としては、
- WinUSB.def
LIBRARY "WINUSB.DLL" EXPORTS WinUsb_AbortPipe@8 WinUsb_ControlTransfer@28 WinUsb_FlushPipe@8 WinUsb_Free@4
- ここの@とうしろの数字があったりなかったりで、リンクに成功したり失敗したり、また、リンクに成功しても実行時にDLLプロシージャーエントリーポイントがあったりなかったりと、かなり意味不明だ。
- WinUSB.def
- ちなみに、winusb.dllを逆アセンブル(dumpbin)してみるとEXPORTSのシンボルに@以下がない。
- @数字というのは(推測だけど)WindowsAPIの呼び出しがPascal Callになっていて、スタックをpopするバイト数なんではないかと思う。
- いまだにPascal Callだなんて、ププーだよね。
- よくわかってないのが、winusb.dll(と、winusb.def)からMinGW用のインポートライブラリ(libwinusb.a)を作るやり方。
ググると、こんなことをやるように書かれている。
pexports.exe winusb.dll >winusb.def dlltool -d winusb.def -l winusb.a
- さいしょに躓くのがpexports.exeの入手、その次はこの@問題。困ったもんだ。
- いろいろ試行錯誤していたら、とりあえず動くlibwinusb.aは出来たんだけれど、再現手順を忘れてしまって同じものが作れないという罠。
PIC32MXでWinUSB 続編
- 今のPIC32monのファームは、AVRライターとかPICライターとかJTAGライターとか赤外線リモコン解析とか何でもかんでも詰め込んだソースになっている。
- けれど、それらはPIC18F2550で動いていたことがある、というだけで実際にはちゃんと動かしていない。
- それどころか、動かすつもりさえない。
- PIC32MXでAVR焼いたりPIC18F焼いたりARMのデバッグをする需要があるとはあまり思えない。
- なんたって、凄い遠回りだからだ。(普通にAVRライターとかPicKit2とか揃えるほうがずっと手間が掛からない)
- なので、全部削除しようかな、と思っている。
- ソースをスリム化してからA/D変換を試してみよう。
- 余力があればVGA出力も考えてみる。NTSCはいいや(他の人が既に実装済みなので)
PIC32MXでWinUSB
- PIC32monとHIDBootXのMIPS逆アセンブラでmips16のコードがうまく逆アセンブルできないなーと悩んでいたら、
- info構造体のendianフィールドがLITTLEになってなかったっぽいことが発覚。
- 直しときました。
- PIC32monのほうは、
MIPS> boot 0
- でHIDBoot.Xに戻れるようになりました。(ってこれもマイナーだなぁ)
チラシの裏。的な何か。
- ADSLの有線ルータが壊れたらしい。それで、今更有線ルータ買ってくるのも負け組(?)なので、安い無線ルータを買ってきた。(2200円くらい。ELECOM製。なのにGiga Hub 8portも付いてるわ、PPoEスループットが200M超えてるわで、8MごときのADSLには極めてオーバスペック)
- でも、PPPoEでunnumberd出来ない。
- いくらやって駄目らしく、M子のBBR-4MGに変えたら一発で繋がったらしい。
- なんじゃそれー。
- BBR-4MGは遥か昔瓶詰堂さんがLinux載せてた奴(もちろん試しました)。でも4MG今だに売ってる現行製品であった。
- 円安でパーツ値上がりしそう(もうしてる)なので、seagateの2Tを纏め買いした。Windows8を入れるつもり。
- なんといっても3300円のDL販売をたくさん買ったからのう。
- だけど、今使ってるPC,WindowsXPだけど安定しているし8に入れ替えるの面倒だし
- マザーボードから変えるつもり(H61→B75)で、マザボも買ってあるんだけど、いざ載せ変えようとすると、面倒なのでやらないんだよなー。困ったもんだ。
WindowsXPから8(64bit)にしたらどうなるかはよく知っている(つもり)
- すでにWindowsXPなのに16GBもメモリー積んでて電気食ってるだけの12GB分がちゃんと使えるようになる。
- VMWarePlayerにしこたまメモリー突っ込んでもへこたれなくなる。
- disk i/oなどの足回りがすこしだけ速い。
- そのかわりに、GUIのデザインがめちゃめちゃダサくなる(Win8)
- 日本語FEPの動作もめちゃめちゃダサくなる。DOS窓時のインライン変換途中の表示が見えない(なんとかならんのか)
- TrueTypeフォントのレンダリングがかなり汚くなる(ほんと、なんとかならんのか)
- 1024x768液晶だと狭くなる。
正直、デメリットのほうが大きいとさえ感じられる。くそったれバルマーめ。
それから、どうでもいいことだけど、8086モードの骨董品 16bit EXE(セグメントレジスタばりばりで1MBまでの低位メモリー空間で動くソフト) 例えばVzエディタとかpkzip.exeとかcommand.comとか、が本気で全く起動しなくなる。起動したけりゃVMWare空間上のWinXPとかWin2000とかWin98で動かすか、遅くていいなら8086エミュレータon Win64で動かすしかなくなる。少し悲しい。
地震
- 最近多い。淡路島、パキスタン国境、三宅島と立て続けだ。
- わりと常時Radio(NHK AM/FM)を聴くようにしてると、あのけたたましい地震速報が嫌でも耳に入る。
- iPod nanoを衝動買いしそうになったががけっぷちで堪えた。
- AMラジオが聴けない。
- iTunesは嫌だ。絶対インストールしたくない。Windowsが重くなる元凶だし、普通にファイルコピーとしてmp3を転送できないのも大きな不満だ。
- iPod nanoサイズのAM/FMラジオがあるなら即買いするかも。電池は60時間くらい持てばそれでいい。液晶は要らない。
- aitendoのパーツで作ることも考えたけどリチウムの充電の危険性が怖くて手を出せない。(それとケース加工は苦手)
- それよりかなりでかい(けれどポケットラジオとしては最小の)AIWAのAM/FMラジオを10年以上も使ってるけど、もう、このてのラジオを手に入れるのは不可能っぽい。(中華の低品質なものは売ってるけどいらない)
- どうでもいいけど、早うpic32でA/D変換を書かなくちゃだわ。ずっとサボりっぱなし。
pcDuino:ArduinoとRaspberry-Piが合体したような奴。
苺
- http://strawberry-linux.com/catalog/items?code=35025
- Allwinner A10はCortex-A8(1GHz)で内蔵GPUがMali-400(ARM)だ。GPU込みでチップ単価は5ドル程度らしい。
- このCPUは中華Androidで大量に使われていたので、持ってる人も多いと思う。
- シングルコアな割りには性能は決して悪くはないんだけど、Android4.0のChromeがカスなのでブラウジングは常に重たい(耐えられないレベル)。Operaだと辛うじて実用になるレベル。
- OS: Linux(Ubuntu 12.04)+Android(Android ICS 4.0) とのことなので、実は手持ちのAndroidをLinux化するのに使えるかもしれない。(Androidアプリのubuntu installerを使ってはいるけど速度的とソフト的に色々不満が多いので、本当にLinux化したい。)
- Ras-Piより高価だけど、DRAMが1GBあるのでLinuxは余裕。
- なんだかんだ言ってもBeagleBoardより安いし性能は上だし、中華アンドロイドと同じときている。USBスティック型中華Android買うよりも正統派かも(どこが?)
PIC32MX:A/D変換試し中。
- ある程度コツを掴めた。
- Pinguino的な単発変換を行なってprintfする例は、USB簡易モニターのuser_cmd()に実装しておいた。
- 問題は連続変換と割り込みサービスなんだけど、これもほぼうまくいった。
コツ
- 1)まず、サンプリングクロックを決めること。これはTPB(ペリフェラルバスクロック時間)を2の倍数で分周する。
- 例えば、CPUが40MHzで動作していて、TPBが40MHz(周期で言うと25nS)だとすると、
- サンプリングの基本周期は50nSになる。
- しかし、サンプリングクロック時間の最小値はデータシートで65nSと規定されているため、50nSは除外されて、
- 100nS,150nS,200nS,・・・・のような50の倍数nSの中から選ぶ。
- 2)A/D変換時間(周期)の計算
- まずサンプリング時間は
サンプリングクロック周期×TAD (TADは1〜31の整数。0は禁止)
- になる。
- TAD=1にしてサンプリングを100nSに出来るかというと出来ない。最小値は132nSなのでTAD=2(200nS)を選ぶ。
- 次にコンバート時間の計算だが、これは12クロック掛かる。なので最小サンプリングタイムで考えるなら100nS * 12 = 1200nS が消費される。
A/D変換時間=(サンプリング時間+コンバート時間)
- なので、100nS * (12+2) = 1400nS が最小値。
- 3)1Mサンプル/秒にするためには
- A/D変換時間を丁度1000nSにすることが出来れば1Msample/Secを達成できるのだが、そのためにはCPUクロックを少し弄らなければならない。
- サンプリングクロックを最小の規定値65nSにすることが出来れば、
1400nS * 0.65 = 910nS
- となって1000nSを切ることが出来る。しかし65nSにするとCPUクロックが中途半端な値になるので、66.6nSを選択してサンプリングTAD=3を選ぶと、
66.6nS * (12+3) = 1000nS
- とぴったり1Mサンプル/秒にすることが出来る。
- この場合のペリフェラルクロックは1/66.6nS = 15MHzの倍数を選択する。例えばCPUを60MHz動作、ペリフェラルクロックを30MHz、サンプリングクロックを15MHzに選ぶ。
- PIC32MX220F032BのようなDIPタイプではCPU上限が50MHzなので、60MHz動作はオーバークロックになる。
- なので、CPUを30MHz動作させる。4MHzの逓倍用PLLをMUL_15(15倍)選択して60MHz PLLを作り、1/2ポストスケーラーを掛けて30MHzにすると良い。
PIC32MX:USBオシロスコープ
- 完成!
- 220円のPICでUSBオシロを実現。
- (たぶん)500kサンプル/秒
- 1ch/2ch/4chまで。(ch数が増えるとサンプリング数は逆比例)
- ファームウェアとWindows側のソースを全公開。
もっと読む: USBオシロスコープ