2012年07月13日

PIC32MX220F032B メモ

CPLD のカテゴリで延々と記事を書いているのだが、ちょっと脱線。

USB OTG コントローラ付きの PIC32MX PIC32MX220F032B が、秋月で 220円という低価格で売られるようになった。この値段だと、単なる USB コントローラより安い。AVR の代わりとして使う気はないのだが、なにかの専用ICとして仕立て使ってみたい気がしている。

    興味があるのは、とりあえず USB ホスト機能。USB BlueTooth ドングルは妙に安いようだから、これでシリアルやSPIに変換できたらと思っている。

というわけで、ちょっと下調べ。

28 pin DIP だが、自由に使えるピンは少ないようだ。

~MCLR (1) AVdd
PGED3 RA0 G1 AVss
PGEC3 RA1 G2 G1 RB15/SCK2 G1 SS1
PGED1 RB0 G4 G4 RB14/VBUSON/SCK1 G2 SDI1 SDO1 SDO2
PGEC1 RB1 G2 G3 RB13 G3 SDI2
SDA2/RB2 G3 Vusb3v3 G4 SS2
SCL2/RB3 G1 G2 RB11/D- PGEC2
Vss G4 RB10/D+ PGED2
CLKI Vcap
CLKO Vss
SOSCI RB4 G1 G4 RB9/SDA1 TDO
SOSCO RA4 G3 G2 PB8/SCL1 TCK
Vdd G1 PB7 TDI
TMS/USBID RB5 G2 Vbus

とりあえずピン配置をメモ。JTAG を使うと 11 pin しか自由に使えない。ただ、コンフィグで JTAG は Disable に出来る。そうすると 15 pin 使えるようになるらしい。

補足: デフォルトでは、セカンダリオシレータ(32.768 Hz 水晶) が ON になっているそうだ。さらに、USBID と VUSBON の設定も コンフィグにあり、これも ON になっているとポートとして使えない。また、PPS -- Periphral Pin Assign という機能があって、UART などのピンをいくつかのピンから選択できるのだが、この選択を 1 回しかできなくする設定も コンフィグにある。とにかくコンフィグはよくよく調べておかないとならない。

補足2: JTAG は コンフィグでは Enable にしておいて、ブートローダやプログラムの先頭で

CFGCON = 0; // 1xx/2xx 以外では DDPCON = 0;

とやって Disable にするものらしい。こうすると、ファームウェアを書き込むときにだけ JTAG を使うことができる。

    RA0 o AREF PGED3
    GND
    RB4 U1TX RB15 o D13 LED1
    RA4 U1RX RB13 o D12
    RB14 SCK1 RB5 o D11 TMS
    RA1 o D10 PGEC3
    RA10 x D9 LED2
    RB7 o D8 BUT/TDI

    RC7 x D7
    RC6 x D6
    A0 x RC0 RC5 x D5
    A1 x RC1 RC4 x D4
    A2 o RB0 RC3 x D3
    A3 o RB1 RC2 x D2
    A4 o RB2 RB9 o D1 U2TX/TDO
    A5 o RB3 RB8 o D0 U2RX/TCK

    ちょっと PIC32-PINGUINO-MX32 のピン配置を調べてみた。これは、同じ PIC32MX220F032 だが 44pin の D を使っている。B ではピンが足りなすぎて Arduino もどきにするには、厳しそうだ。

組み込みの機能のピンは、割り当てが最初から決まっているものと、割り当てを変えられるものがある。ここで載せたのは、最初から決まっているもので、興味があるもの。( ADC 関係は面倒なので載せていない。)
どうも I2C と SPI の SCK は配置を変えられないようだ。

    ピン A0 B3 B4 B15 B7
    出力 U1TX U2RTS SS1 OC1 C2OUT
    入力 INT4 T2CK IC4 SS1 REFCLK1

    ピン RA1 RB5 RB1 RB11 RB8
    出力 SDO1 SDO2 OC2
    入力 INT3 T3CK IC3 U1CTS U2RX SDI1

    ピン RB6 RA4 RB13 RB2
    出力 SDO1 SDO2 OC4 OC5 REFCLKO
    入力 INT2 T4CK IC1 IC5 U1RX U2CTS SDI2 OCFB

    ピン RB14 RB0 RB10 RB9
    出力 U1RTS U2TX SS2 OC3 C1OUT
    入力 INT1 T5CK IC2 SS2 OCFA

割当てを変えられるものは、4 つのグループに分けられていて、その中では自由に割り当てられるようだ。

あといくつか

    フラッシュの書き込みは、OpenOCD が使えるとのこと。
    ~MCLR (リセット) にはプルアップが必要。
    レジスタへの 書き込みは割り込み禁止で

デジキーでの値段とか

    QFN28 や SSOP28 パッケージもあり、デジキーでは 300円ぐらい。10 個買えば、秋月価格に近くなるみたいだ。

      QFN28:
      1 315.00000 315
      10 246.00000 2,460
      25 225.80000 5,64
      SSOP28
      1 300.00000 300
      10 236.30000 2,363
      25 216.12000 5,403

    ピンを増やしたいなら TQFP44 がある。QFN もあるけど。値段は 少し高くなる。

    44pin は、PIC32MX220F032D とか末尾が D。
    メモリが多いのは、型番が違う。

    PIC32MX220F032B/D Flash 32KB RAM 8KB
    PIC32MX230F064B/D Flash 64KB RAM 16KB
    PIC32MX250F128B/D Flash 128KB RAM 32KB

    SSOP28 128KB
    1 431.00000 431
    10 338.20000 3,382
    25 310.12000 7,753
    DIP28 128KB
    1 457.00000 457
    10 359.30000 3,593
    25 329.48000 8,237

    これでも安いといえば安いが、使いこなせなければ意味ないし気軽に買えるわけでもない。

USBコントローラ

    PIC32MXの USB インターフェイス について 秋月の URL にあるデータシートを見れば、説明が載っているわけだが、全部英語。で、レジスタの名前 例えば U1OTGIR で検索すると ... PIC24F の 日本語ドキュメント がヒットする。

    構成図を見ると、PIC32MX と PIC24F の USB モジュールは実に似ている。どうもほとんど同じようだ。概要を知りたい程度なら、PIC24Fの方で済みそう。

    PIC には、USB Framework というのがあるらしいが、32KB でも厳しいらしい。gcc のくせに最適化を使わせないというのは、どうかと思うし、このチップを使うなら、全部自前で用意した開発ツールでビルドできるようにしたい。

    ... というわけで、使いたくはあるが、なかなか手がつけられないのだった。

ブートローダ

    AVR の ATmega32u2 用に自前の USB ライブラリ で USBasp プロトコル ブートローダ を作っている。 PIC32MX も 3KB の ブートローダ 領域を持っている。移植できたりしないかな。ヒューズビット等の関係があるから、avrdude が使えるかどうか分からないが ...

    あと、AVR と同様に割り込みを一切使わずに ブートローダ を作れるなら、mips16e が使えるかも知れない。

    ブートローダは、後述している Pinguino プロジェクト のを使うのが吉らしい。自分で作る必要はなかったか。

     ・ Section 5 : Flash Programming -- Run-Time Self-Programming(RTSP) の仕様書 (pdf)
     ・ PIC32MX Flash Programming Specification -- JTAG , ICSP の仕様書 (pdf)

      JTAG を使った書き込みには、2 種類あるらしい。ひとつは、Programming Executive(PE) を RAM に送り込んで それを使って Flash を操作するやりかたで 多分これが標準的。もうひとつは、直接 RTSP 用レジスタを操作して書き込むやりかた?

参考になるサイト

     ・ 『マイコン風雲録: 秋月でPIC32MX 28pin DIP版出る

    ここが詳しい。Pinguino プロジェクト というのがキーワードっぽい。

    Pinguino プロジェクト

      ブートローダや gcc まで 含まれた開発ツール Pinguino X.3 を 配布している。

      gcc/binutils のパッチ や config方法 、ブートローダのソースコードだけ見たいのだが どこにあるんだろう?

      そもそも gcc のバージョンは? 4.6.2 と 4.5.2 があるようだが。 自製 AVR_Toolchain は、gcc-4.4.3 を使っているのだが、これで済ませられないかな?

      追記: svn から最新のものをダウンロードしてみた。(リビジョン 543)

        Configured with: ../configure --target=mips-elf --program-prefix=mips- \
        --enable-languages=c --prefix=/home/jpm/pcompiler --disable-nls \
        --disable-tui --disable-gdbtk --disable-shared --enable-static --disable-threads \
        --disable-bootstrap --with-dwarf2 --enable-multilib --enable-sim \
        --with-float=soft --without-headers --with-lib-path=: \
        --with-pkgversion='Pinguino C Compiler for PIC32 v4.5'
        Thread model: single
        gcc version 4.5.2 (Pinguino C Compiler for PIC32 v4.5)

      -v で確認するとこういうオプションで config されていることは分かった。

      MIPS は AVR のように 新しいチップに対応するために コンパイラを変更したりしない。たぶんパッチなしなのだろう。変更がないのなら、gcc-4.4.3 でも構わなさそう。ちょっとビルドしてみよう。

      ところで、バイナリのダウンロードは、
       http://code.google.com/p/pinguino32/downloads/list
      ここから出来るのだが、win32 版だけ小さい。これはたぶん g++ がない。svn の方にも win版だけ g++ がなかった。

    pic32prog: PIC32MX220をPickit2/Pickkit3で書き込む

      これは ... ソースコード を GPLv2 で配布しているではないか。MPSSE(Olimex ARM-USB-Tiny JTAG adapter) 用のコードもある。
      ちょっと見てみよう。FT232RL に対応できるかも知れないし、逆に 自製の JTAG ツールで対応できるかも知れない。(対応できた。追記参照)

    Olomex PIC32-PINGUINO-MX220



      Olimex のボード 。結構安い。9.95EUR。送料はいくらだろう?

      リンクも参考になりそう。

      arduio と ピン互換になるようにしていて、外側内側には ユニバーサル基板を使えるようにもう一列追加されている。

      追記: Mouser で PINGUINO を扱っている

      PIC32-PINGUINO-MX220 1:\1,572
      PINGUINO-MICRO (PIC32MX440F256H) 1:\1,660

      本末転倒なのかも知れないが、pickit3 や PIC32MX250F128B/PIC32MX220F220B あるいは UM232H なんかを一緒に買うと 7500 円は超えそうだし、Mouser で買うのも悪くなさそう。

      追記: デジキーでも PINGUINO を扱いはじめた。

      PIC32-PINGUINO-MX220 1:\1,418
      PINGUINO-MICRO (PIC32MX440F256H) 1:\1,418

      こっちの方が安い。

    エラッタ : レジスタに書き込んでるときに 割り込みが起きると 割り込みからの戻りで 再度書き込む。

    割り込みが起きた以上そうなるのは、MIPS の特性。割り込みが起きないようにしていないというのがバグ?

PIC32MX 用 gcc のビルド(1)

    以前、『AVR Toolchain (その2)』という記事で avr-gcc をビルドした。この バージョンの gcc を PIC32MX 向けにビルドしようと思う。

    binutils-2.20.1


    ./configure --prefix=/d/MIPS32_Toolchain --target=mips-elf --disable-shared \
    --disable-threads --enable-languages=c,c++ --disable-dssi \
    --disable-plugin


    --enable-languages など関係ないはずだが、prefix と target だけ変更してビルド。

    make ; make install

    gcc-4.4.3


    ./configure --target=avr --prefix=/c/AVR_Toolchain --enable-languages=c,c++ \
    --with-dwarf2 --disable-doc --disable-shared --disable-libada \
    --disable-libssp --disable-nls --enable-fixed-point \
    --with-build-time-tools=/c/AVR_Toolchain/avr/bin

    AVR ではこういう指定をした。

    ./configure --target=mips-elf --prefix=/d/MIPS32_Toolchain --enable-languages=c \
    --with-dwarf2 --disable-doc --disable-shared --disable-libada \
    --disable-libssp --disable-nls --disable-fixed-point \
    --with-build-time-tools=/d/MIPS32_Toolchain/mips-elf/bin \
    --disable-tui --disable-gdbtk --disable-threads --disable-bootstrap \
    --enable-multilib --enable-sim --with-float=soft --without-headers

    それを元に Pinguino で指定しているオプションを追加。C のみに限れば 比較的簡単だろう。

    オプションは、有効でないものもおそらく指定している。だが、確認するのが面倒なので気にしない。

    make は通った。

    mips-elf-gcc -Os -mips16

    も使えるようだ。


    ls /d/MIPS32_Toolchain/bin/
    libiconv-2.dll mips-elf-gcc-4.4.3.exe mips-elf-objdump.exe
    libintl-8.dll mips-elf-gcc.exe mips-elf-ranlib.exe
    mips-elf-addr2line.exe mips-elf-gccbug mips-elf-readelf.exe
    mips-elf-ar.exe mips-elf-gcov.exe mips-elf-size.exe
    mips-elf-as.exe mips-elf-ld.exe mips-elf-strings.exe
    mips-elf-c++filt.exe mips-elf-nm.exe mips-elf-strip.exe
    mips-elf-cpp.exe mips-elf-objcopy.exe

    ls x.3/win32/p32/bin/
    grep.exe mips-as.exe mips-ld.bfd.exe mips-strings.exe
    libiconv-2.dll mips-c++filt.exe mips-ld.exe mips-strip.exe
    libiconv2.dll mips-cpp.exe mips-nm.exe mphidflash.exe
    libintl-8.dll mips-elf-gcc-4.5.2.exe mips-objcopy.exe pcre3.dll
    libintl3.dll mips-elfedit.exe mips-objdump.exe regex2.dll
    make.exe mips-gcc.exe mips-ranlib.exe
    mips-addr2line.exe mips-gccbug mips-readelf.exe
    mips-ar.exe mips-gcov.exe mips-size.exe

    作ったものの実行ファイル一覧と Pinguino (win版)比較。

    dll は、AVR_Toolchain と同じものを入れている。

    Pinguino では、make と grep が添付されている。binutils は target=mips でビルドしているのか。gcc もリネームしている。

    さて、これだけで、PIC32MX220F032B で動くものが作れるかというと ダメ。足りないものがある。

    Pinguino をチェックすると

      p32/include/non-free/cp0defs.h
      p32/include/non-free/p32xxxx.h
      p32/include/non-free/regdef.h

      p32/include/non-free/proc/p32mx220f032b.h
      p32/include/non-free/proc/p32mx220f032d.h
      p32/include/non-free/proc/p32mx250f128b.h
      p32/include/non-free/proc/p32mx440f256h.h
      p32/include/non-free/proc/p32mx460f512l.h
      p32/include/non-free/proc/p32mx795f512l.h
      p32/include/non-free/proc/p32mxgeneric.h
      p32/include/non-free/proc/ppic32mx.h

      p32/obj/non-free/crt0.S

      p32/lkr/ISRwrapper.S
      p32/lkr/elf32pic32mx.x
      p32/lkr/procdefs.ld
      p32/lkr/PIC32_PINGUINO_220/ISRwrapper.S
      p32/lkr/PIC32_PINGUINO_220/elf32pic32mx.x
      p32/lkr/PIC32_PINGUINO_220/procdefs.ld

    多分これらが必要。include のものは、レジスタの定義が主。non-free となっているのは、MicroChip 提供のコード。crt0.S はスタートアップ。p32/lkr は、リンカスクリプトだと思うが、ISRwrapper.S が何なのかは未チェック。

    これらを使って main を call するところまで 行くのが最初のステップ。

    ライブラリは、AVR-libc 風のものを 以前に作ったのがあるから、これを使えるようにしたい。これが次のステップ。

      記事『USBBOOTプログラム用ライブラリ』にどういうものかについて記載している。usbboot-wk19.tar.gz がその最後の版で 未完成のまま放置中。

      記事を見直すと、-fno-pic ,-fno-pic -mno-abicalls , -fpic といったオプションのどれを使うべきかで悩んでいた。これもチェックしておかないと。

      PIC32MX は、シャドウ・レジスタを持っている。対応できると 割り込みで、レジスタのセーブ・リストアが要らなくなる。ちなみに AVR-libc 風ライブラリは、(適当なものだが)割り込みベクタもサポートしている。

      リンカスクリプトは、チップの種類毎に ユーザプログラム用、ブートローダ用の 2 つ。中を見てみると割り込みベクタまでいちいち定義している。AVR-libc だとベクタは アーキテクチャとして定義されている。のだが、ライブラリの中でサポートしていて、リンカスクリプトは、関知しない。MIPS は、割り込み要因毎のベクタは アーキテクチャとして定義されていない。にも関わらずリンカスクリプトに細かく定義されている。

      これは相当に気に入らない。どうせ自製のライブラリにするんだから、リンカスクリプトは 一種類で済ませたい。

      メモリマップを調べてみた。kseg0 だけ書くと

      Start Size
      Config 9FC00BF0 10
      Boot 9FC00000 BF0
      Flash 9D000000 16KB - 128KB
      RAM 80000000 4KB - 32KB

      1xx , 2xx は、こんな風になっていて、スタートアドレスは同じ。Flash と RAM のサイズが違うのみ。

      あと、PIC32MX は、M4K アーキテクチャで、割り込みベクタは、ハードウェアでサポートされているらしい。そうだとしても AVR-libc のように .text セクションの先頭に 置けばよいだけのはず。ただ、エントリが細分化されると レジスタのセーブ・リストアが面倒。シャドウレジスタを使いたくなる。使い方を調べないと...
       ・ Breaf Introduction for M4K Shadow Registers
      これか?

      リンカスクリプトを見てみたが 割り込みベクタは 1エントリにつき 32バイト(8命令分)使う。で、1xx/2xx は 32 エントリ -- 1KB も消費するわけだ。データシートの割り込みコントローラの説明を見たところ マルチベクターモードと シングルベクターモードがあることが分かった。シングルベクターモードでは、シャドウレジスタを使うか使わないかの設定もある。あと、INTSTAT レジスタに 割り込み番号が入っているが、CPU に通知した番号らしい。もし、シングルベクターモードでは 常に 0 になるなら使えない。( IFSx という ビットマップから番号を作れはするが、重くなる。)

    その次が、自製の USB デバイスライブラリの移植。

      こっちは、『Teensy(1.0)互換ボード』に記載した angel_loader-1.4c.zip が最新。API を共通にしたいところ。

      USB デバイスライブラリは、割り込みを使用していない。PIC32MX でも同じように出来ると良いのだが ...

    ここまで動かせたら、USB HOST のプログラミングに入れる。なかなかに道のりは遠い。

    ライタソフトも FT232R 対応のものを用意したい。これは別途検討するが、動かそうとする段階で欲しくなる。

      MachXO2コンフィグめも』の記事の rtavr_tools-0.10.tar.gz が公開している 自製 JTAG ツールの最新版なのだが、それから変更した版がある。

      自製 JTAG ツールだと、もともと FT232R 用で、JTAG レベルの手順が分れば、PIC32MX に対応できる。HEX ファイルの読み込みも 一応ある。

      pic32prog に FT232R 用のコードを追加する手もあるだろう。どっちが楽かというと 多分自製ツールでの対応。でも、元が MPSSE に対応しているなら、 FT232R のコード追加は、それほど難しくはない。ただし、ピンアサインの自由度がなくなるかも知れない。

ライタの検討(1)

     ・ PIC32MX Flash Programming Specification -- JTAG , ICSP の仕様書 (pdf)

    まずは、どういう手順で操作するのか知るためにこれを読んでみた。

    FLASH をプログラミングするには、2 つの手段がある。ひとつは、JTAG でもうひとつは、ICSP(2-Wire) 。ICSP は、PGECx/PGEDx という 2 つの 信号線と ~MCLR を使うもので、PIC32MX220F032B には、3 セットもある。そのうちのひとつは、D-/D+ に割り当てられている。USB を使うのが前提であれば、このピンは必ず空いている。相当便利なような気がしてきた。

    ICSP は、PGECx をクロックにして、PGEDx でデータを送受信する。これを JTAG の操作にマッピングしている。だから 下位レイヤを変更することで対応できる。それは良いのだが、JTAG だと 1 CLK で済むところを、標準的には 4 CLK かける 。そして、4 CLK の間で 出力と入力を切り替える。MPSSE だと、高度な I/O ができるので問題ないのだが、FT232R だと 出力を Hi-Z にするための付加回路が必要になりそう。チップの機能で 入出力を切り替えると とてつもなく遅くなる。

    あと、ICSP を使うためには、手続きがある。3 セットもあるわけだし、どれを使うか 手続きなしに決められるわけもない。一方 JTAG は手続きなしらしい。... ということは Disable にしてしまったら、どうなるのだろう? ひょっとしたら使えないのかも知れない。

      追記: だいぶ分かってきた。PGEx は、どれを使うかコンフィグで設定する。00 を設定してしまうと、使えなくなってしまう。JTAG も コンフィグで Disable できるが、プログラムでもできる。Enable にしておいて、プログラムの頭で Disable にする使い方が良い。(ブートローダを使っている場合は、既に Disableにされているから プログラムではなにもしなくて良い。)こうすることで、最悪 JTAG を使って復活できる。

      もうひとつの懸案は、クロック。AVR だとクロックの設定を失敗すると面倒なことになった。JTAG/ICSP では、クロックは関係無いようなことが書いてある。そうであれば、チップイレーズすることで、なんとでもなるのだろう。

    ... というわけで、ICSP を中心に検討した方が良さそうな感じ。

ライタの検討(2)

    ICSP を中心にするといっても、操作の基本は JTAG と変わらない。では、それはどういうものなのか?

     ・SetMode
     ・SendCommand
     ・XferData
     ・XferFastData
     ・XferInstruction

    これら 5 つのオペレーションを使うらしい。最後の XferInstruction は、基本操作ではなく、上の 4 つを使って実装する。で、名前から想像できるように 命令列を送り込んで実行させるもののようだ。

    どのような命令を送り込むのかについて、詳しく書いてある。また、PE -- Program Executive という プログラムを RAM に送りこんで 高度な操作をさせることも可能になっている。PE を使うやりかたは標準的で、pic32prog でも採用しているようだ。

    それは良いのだが ... こんな手続きだと 非常に面倒。自製の ツールに組み込むのは止めにして、pic32prog を改造する方針で検討する。

    pic32prog を使う利点はほかにもあった。
     ・ PIC32MX220F032B 製品ページ
    ここに、いろいろリンクがあるのだが、AN1388 -- PIC32 Bootloader の HID プロトコルに対応しているのだ。そうであれば、pic32prog に 機能をまとめてしまった方が便利だろう。

    さて、pic32prog だが、svn から チェックアウトしたものを
     ・ pic32prog-r51-20120714.tar.gz
    に置いた。

    これを見ると .. MPSSE を使うのに ftd2xx.dll を使っていない。なんと libusb を使って直接アクセスしている。これは GPL をクリアするためなのだろうか? ただ、遅いはずだし、ちょっと改造がやりにくい。といっても Synchronos BitBang Mode はモードが違うだけで、READ/WRITE を基本にするところは同じ。ICSP に対応するにしても MPSSE のコマンドが違うだけの話。なんとかなりそうな気はする。

    あと、対応している VID:PID が OLIMEX_ARM_USB_TINY/OLIMEX_ARM_USB_TINY_H だけになっている。ジェネリックな FTDI の ID に対応していない。

    行数は全部で、985 行。libftdi 相当が含まれていると思えば、かなり小さいともいえる。処理をちょっと見てみたのだが、

     ・ MPSSE としての機能しか使っていない。TCK/TMS/TDI/TDO のみの操作ということ。
     ・ mpsse_send / mpsse_recv が基本操作。MPSSE だと recv 不要の操作がある。ICSP の対応 や Synchrons BitBang では、必ず READ が入るから 少々対応が面倒。

割り込みアドレスの調査

    話は飛ぶのだが、ライブラリを作るうえで どんな割り込みアドレスがあるのか知っておかないといけない。ちょっと調べてみた。

    その前に メモリマップ

    kseg1 base Memory Map
    1xx/2xx 3xx/4xx 5xx/6xx/7xx
    Start Size Start Size Start Size
    Config BFC00BF0 10 BFC02FF0 10 BFC02FF0 10
    Boot BFC00000 BF0 BFC00000 2FF0 BFC00000 2FF0
    Flash BD000000 16KB - 128KB BD000000 BD000000
    RAM A0000000 4KB - 32KB A0000000 A0000000

    kseg1 内のメモリマップを作った。1xx/2xx 以外も調べてみたが、Boot 領域 のサイズが違う。Boot 領域の最後 16 バイトは、Config 領域で、AVR での ヒューズビット・ロックビットに相当する重要な情報が入っている。ここが 1xx/2xx でずれるというのは覚えておかないと。
    ただ、スタートアドレスはみな同じ。リンカースクリプトはかなり共通化できそう。

    さて、割り込みだが、

    0xBFC0_0000 Reset,Soft Reset,NMI
    0xBFC0_0200 EJTAG Debug (EJTAG ProbEn==1)
    0xBFC0_0380 all generic interrupt (BEV==1)
    0xBFC0_0480 EJTAG Debug (EJTAG ProbEn==0)

    0xBD00_0000 (EBase)
    0xBD00_0200 Single Vector Mode (BEV==0)
    0xBD00_0200 Multi Vector Mode (BEV==0)
    + vector_no * 32 * VS(VS==1)

    どうも ユーザコードにくる割り込みは、0xBD00_0200 から始まる割り込みベクタのみらしい。シングルベクタモードを使うと、たった一つ。

    あと、ブート領域になにかコードが入っていないと、ユーザコードは実行されない。それに 最初のエントリは、どこなのか? ブートローダによって決まるような?

追記、回路図を作ってみた



    PIC32MX2xx用基板』用の回路図の焼き直しなのだが、ユニバーサル基板とかで作るときの参考用として作った。



    いつも水晶の収まりが悪いわけだが、MA-506などはどうだろう?足を伸ばすことで、ブレッドボードなんかに挿せるような気がする。

    追記) ブレッドボードで 、ライタのテスト用配置を考えているのだが、なかなか厳しい。PIC32MX032B は、28 pin で 14 列を使う。予定している UM232H も 28 pin で これまた 14 列。そして、EIC-801 (BB-801) などは 30 列しかない。2 列しか 余裕がないのだ。で、この 2 列で入るものとして、リセットスイッチと DTC144 を考えている。

    o-------o
    | |
    | TACT |
    | -SW |
    --o---o---o o-------o
    |
    | o---o---o
    UM232H | |
    | x x | PIC23MX220F032B
    | |
    | o---o---o
    --o---o---o

    o o o DTC144
    IN OUT GND

    たぶん、こういう位置関係以外は無理。UM232H の重なっている部分は、AD6, AD7 で IN/OUT ともに接続する設定にすれば OK 。LED は、ストレートに 接続するしかない。そのためには、小基板を使ったりして 抵抗 + LED のパーツを作る必要がある。

    AE-UM232R だと 24 pin で 2 列増える。だが、DTC144 は重ねられないから 位置関係はあまり変わらない。

Arduino がライタになるらしい。

    ardupic32』というのを発見した。これは、JTAG で書き込む。

    遅いらしいのだが、ブートローダさえ書き込めさえすれば、あとは快適になるはず。幸いなことに、JTAG のピンは 5V トレラントになっているので、5V 版の Arduino が使える。

    同じようなものは、USB デバイスのコードが自由に書けるようになりさえすれば、作れるはずで いずれは検討したい。

追記 : BitBang で 書き込みが出来た。

    pic32prog を改造して、FT232R や FT232H で 書き込みできるようになった。(テストは、UM232H のみ)

    ものは、
    pic32prog-r62-ftdi-05.zip

    バイナリも同梱しているので、ftd2xx.dll を別途用意すれば使える。『pic32progの改造』の記事で説明はしているのだが、経緯込みで書いているので、イマイチわかりづらいと思う。いずれまとめの記事を起こしたいとは思う。

    もう少し詳しく書くと、Synchronous BitBang を使った CISP (外付けトランジスタが必要) と MPSSE での BitBang を使った CISP (結線のみ) の動作が確認できた。JTAG は、まだ動いていない。

関連記事
posted by すz at 20:51| Comment(0) | TrackBack(0) | PIC32MX
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/57033087
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック