2014年04月06日

2014: 最強マイコン! PIC32MX250/230 128KB/64KB 秋月で出る!

2014: 最強マイコン! PIC32MX250/230 128KB/64KB 秋月で出る!/

なんと、なんと、320円ポッキリで
工作用DIPマイコン史上最強 xD のマイコンがついに秋月価格で登場しました。
これはスゴイ。

360円 2014/04
PIC32MX250F128B
http://akizukidenshi.com/catalog/g/gI-07644/
320円 2014/04
PIC32MX230F064B
http://akizukidenshi.com/catalog/g/gI-07643/.

* Pinguino基板
このマイコンを搭載可能なPinguino基板
http://wiki.pinguino.cc/index.php/PIC32MX250_Pinguino

実は、この基板のガーバ・ファイルがここに置いてあって、
置いてあって。 xD
あくまで置いてあるのを偶然見つけただけなんだけど。 :D
といっても、「どっかに置いてないかなぁ〜」って目で探してたのは否定しないけど、 xD
Fusion PCBとかに出せば作れてしまうのだった。
この大きさだと1000円/10枚で入りそうかも。
と、バラしていいのかどうかは少し悩むところ。 (オイ
個人で使う分には問題ない気もする。



参考:
PIC32MX irukaさんのページ
http://hp.vector.co.jp/authors/VA000177/html/PIC32MX.html
秋月でPIC32MX 28pin DIP版出る
チョコットお試し LPC1114FN28 (1) 2012/09
Pinguino X4 IDE 簡単インストール 


posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(0) | TrackBack(0) | PIC32MX | このブログの読者になる | 更新情報をチェックする

2013年11月21日

PIC32MZ: microMIPS版 出る。 2013

新たにPIC32MZというのが発表されたようです。
200MHz/330DMIPS
Flash: 2M byte SRAM: 512k byte
microMIPS命令セット搭載
DSP内蔵
...あとたくさん :-)

だそうです。

このシリーズは結構ハイエンドな感じで縁がなさそう。xD


噂されていたmicroMIPS命令セットが初搭載されました。
ARMでいうところのThumb2命令の様なものらしいです。

個人的にはPIC32MXのDIP版でmicroMIPS版を出してほしいです。


発表文
http://www.microchip.com/pagehandler/en-us/press-release/microchips-pic32mz-32-bit-mcus.html
日本語
http://www.nikkan.co.jp/newrls/pdf/20131120-14.pdf
短い説明
http://ww1.microchip.com/downloads/en/Market_Communication/Microchips%20PIC32MZ%20Press%20Presentation.pdf
評価ボード
http://www.microchipdirect.com/ProductSearch.aspx?Keywords=PIC32MZ
データシート
http://www.microchip.com/wwwproducts/Devices.aspx?product=PIC32MZ2048ECH144
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(0) | TrackBack(0) | PIC32MX | このブログの読者になる | 更新情報をチェックする

2013年04月02日

PIC32: MPLAB(X)でmips16オプションを使うときのメモ 2013

PIC32: MPLAB(X)でmips16オプションを使うときのメモ 2013

* はじまり
* C32とXC32
* mips16オプションの指定方法
* 注意点
* C32コンパイラ
* XC32コンパイラ
* 非常に重要なコード削減オプション "--gc-sections"
* MPLABX上で複数のコンパイラバージョンを切り換えるときの注意点
* MPLABX(v1.70以降)のMakefile + C32 + mips16 でコマンドライン・コンパイル
* 60日のお試し期間かどうかを確認する方法
* -Osオプションの効果 (^^)/

* 効果は絶大だった!!
* PIC32MX250F128Bを使う Flash=128KB, SRAM=20KByte
* C32に未来はない!

* はじまり
PIC32: MPLAB(X)でmips16オプションを使うときのメモ。

ここでは無料で使えるLite版のコンパイラC32、XC32に限って記述する。
mips16オプションはPIC32のコードサイズを劇的に減少させるコンパイラ・オプションであり、(注1)(注7)
220円ポッキリの少FLASH版PICMX220F032Bでは必須となる。
しかし、
Microchipは無料版コンパイラに対してmips16オプションを無効にする方針だ。
ちなみに、mips16オプションは「別に最適化オプションじゃなくて」、
MIPSコア(MIPS32 M4Kコア)が持つ基本機能の使用を選択するオプションなのだ。

以下、ここで使った現時点(2013/04)の最新版を
MPLAB v8.90
MPLABX v1.70
C32 v2.02a
XC32 v1.20
とする。
C32とXC32はインストール時に最初から「Lite版」を選択しています。
従って、60日の試用期間は「最初から終了した状態」で使います。(注8)

* C32とXC32
PIC32用のCコンパイラは、「C32」と「XC32」の2種類がある。
双方ともMPLAB、MPLABX上から使用することが可能。
(MPLABでXC32、MPLABXでC32を使うことも可能)
さらに複数バージョンのコンパイラをインストールすれば、IDE上で切り換えて使用できる。

C32は基本的にMPLABに付属しているが、古い版は以下のページから取得出来る。
過去のMPLAB(X)、コンパイラ倉庫:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en023073

* mips16オプションの指定方法
基本的に以下の使い方がある。
(a) コンパイル時、「-mips16」オプションを追加する。
    但し、この機能はC32、XC32共に無効になっています。
(b) 関数に __attribute__ ( (mips16) ) オプションを追加する。
    C32は効果有りで、XC32は効果なしです。
(c) #pragma GCC option("mips16") をソースコードの先頭に追加する。(注3)
    この機能はC32、XC32共に無効になっています。
(d) リンク時にリンカに「-mips16」オプションを追加する。
    C32は有効、
    XC32は原則無効で、バグで有効になります。(爆
    リンク時に「-mips16」を指定すると、リンクされる標準ライブラリやペリフェラル・ライブラリが
    「mips16バージョン」になるので状況によっては大きくFLASH容量を削減できます。

以下、上記のオプションを個別に「mips16オプション(a)」の様に表記する。
まとめ:
(1) 効果があるのは基本的に「C32でmips16オプション(b)と(d)」です。
(2) 従って、ソースコード上のmips16化したい全ての関数に、
 __attribute__ ( (mips16) ) 
  を付加する必要があります。
  手間といえば手間ですが、その気になれば、なんとかなる。(爆
以下を使います。
"mips16.h":
#ifndef __MIPS16_H__
#define __MIPS16_H__

#define _MIPS16 __attribute__ ( (mips16) )

#endif    /* __MIPS16_H__ */ 
これを、mips16化したいソースコードの先頭に付加します。 例えば、
#include "mips16.h"
...

void foo( void ) {
  ...
  }
uint32_t *bar( void ){
...
}
を
void _MIPS16 foo( void ){
  ...
  }
_MIPS16 uint32_t *bar( void ){
  ...
  }
に変更。
ソースコードが多数あっても、置換していくだけなので1時間もあればケリが付く話(オントカヨ (爆 努力に見合った結果が得られることは間違いないだろう。(体験済み) (爆 また、全部一度にやる必要もなくて、ひとまずサイズの大きな関数やファイルだけを重点的に、 _MIPS16化して行けば良いと思います。 * 注意点 以下の話では、最適化コード・オプションを「-Os」にして、「-mips16」を付加しています。 無料版コンパイラの場合、双方共に一部を除いて無視される方向ですが、(詳細は後述) ここでは「無視するなら勝手に無視してくれ」というスタンスをとる事にします。(注5) * C32コンパイラ C32でmips16オプション(b)が有効になるバージョンは「C32 v2.00以降」です。 v1.xx系はmips16非対応な上、古いので使わない様にします。 C32はMPLABに付属しているのでMPLABを最新にするか、 上記の倉庫から最新のC32(今ならv2.02a)を取得して使った方が良いです。 * XC32コンパイラ 以下はXC32 v1.20の場合です。 全面的にmips16オプションが無効にされている。ただし、"リンク時のみ"「-mips16」オプションがバグ?で有効になる 現象がある。従って将来遮断される可能性が高い。 * 非常に重要なコード削減オプション "--gc-sections" Maple(ARM STM32)やArduino(AVR)のgccでは普通に有効になっている重要な「コード削減オプション」である。 「-mips16」オプションもここで指定しておく。 設定方法: MPLAB、MPLABX及び、C32,XC32共通。 コンパイル・オプション設定ダイアログで以下のチェックを有効にする。 コンパイラ: 「Compiler」- Categories:「General」画面で、 "Isolate each function in a section" "Place data into its own section" "Generate 16-bit code" これは一応、コンパイラの挙動に関わらずチェックしておくことにする。 「Compiler」- Categories:「Optimization」画面で、 「Optimize Level」の図で、「s」(= -Os)にします。(これも無視されます) 少なくとも「-O0」以外にしておくべきです。 リンカ: 「Linker」- Categories:「General」画面で、 "Remove unused sections" にチェックを入れる。 「Linker」- Categories:「Libraries」画面で、 "Optimization level of Standard Libraries" を「s」 ( =-Os) "Genarate 16-bit code"にチェック 項目の表現はMPLABとMPLABXで微妙に違いますが、大体分ると思います。 上記設定でコンパイル時に、 -ffunction-sections -fdata-sections -mips16 リンク時に --gc-sections -mips16 が追加されることになる。 (MPLABX上ではリンカの-mips16指定は出来ない) * MPLABX上で複数のコンパイラバージョンを切り換えるときの注意点 MPLABX v1.70の場合である。 例えばC32の場合、デフォルトで「半角スペースを含む」フォルダにインストールされる。 このあとC32の別バージョンをインストールしても認識はされるが、切り替えできない状態に陥る。 この場合、全てのC32コンパイラを「半角スペースを含まない」フォルダにインストールし直すことで解決出来る。 * MPLABX(v1.70以降)のMakefile + C32 + mips16 でコマンドライン・コンパイル MPLABXのv1.70から、MS-DOS窓で使える「Makefile」が生成されるようになった。 プロジェクトのトップフォルダで「make」コマンドを打てばコマンドライン・コンパイルが出来る。 ただし、「make.exe」はMPLABXに付属のものである必要がある。 例えば、 D:\MPLABX\gnuBins\GnuWin32\bin\make.exe を使う必要がある。 以下のバッチファイル群を使えば、このMakefileを使って「C32 + mips16」でコンパイル出来てしまいます。 (_MIPS16化は必要) MPLABX上の「mips16」オプションの有効、無効にかかわらず、「-mips16」オプション付でコンパイルします。 従って、MPLABX上で作った新規プロジェクト(C32用)にも効果があります。 m.bat mm.bat asm-list.bat 準備中 * 60日のお試し期間かどうかを確認する方法 コンパイル・オプション設定ダイアログで以下のチェックを有効にする。 「Compiler」-「Optimization」画面で、 「Optimize Level」の図で、「s」(= -Os)にします。 この状態でコンパイルすると、お試し期間切れ(無料のLite版状態)なら以下の様なメッセージがOutputウインドウに表示されます。 ... warning: Compiler option (Optimize for size) ignored due to an invalid license ... warning: Disable the option or visit http://www.microchip.com/c32 to purchase a full standard-edition license. * -Osオプションの効果 (^^)/ C32コンパイラに於いて、コード最適化オプションは以下の状況を示す。 -O0(オーゼロ): 最適化一切なし。コードは冗長。 -O1,-O2,-O3,-Os: 一定の最適化が有効になる。この中のどれを指定しても同じ。(注11) コードサイズは激減する。 従って、このページでは代表値として「-Os」を使用する。 コードサイズが激減する現象は以下のページと同じと思われる。 PIC24F:「C30のLite版の最適化オプション」 Microchipが禁止しているのは、多数の最適化項目の内、 最適化レベル(1,2,3)に依存する項目と、「コードサイズ」に関する部分のみと推測できる。(注9) 従って、それ以外の多くの最適化項目が有効になっていると思われる。 * 効果は絶大だった!! このページに書いた設定を全部適用すると、どれくらいの効果があるか確認してみました。 比較は「プロジェクトのデフォルト設定のまま」と「このページの設定適用後」(_MIPS16化含む)です。 コンパイラはC32(v2.02a)です。内容はMicrochipの「FatFSデモプロジェクト」です。 順番にオプションを追加していき、個々のFLASH削減量を見ていきます。 (1) プロジェクトのデフォルト設定のまま:(最適化一切なし) 53.1KByte PICMX220F032BだとFlash容量オーバーで使えません。 (2) 上に--gc-sections系を追加してみる: 43.1KByte 10KByteも減ります。(^^)/ (3) さらに「-Os」オプションを有効にしてみる: 28.5KByte 実は15KByteも減るのね。 (^^)/ (4) さらに-mips16オプションと「_MIPS16化」を追加する: 18.8KByte さらに10KByte減りました (^^)/ 53.1KByte が最終的に 18.8KByte まで縮みました。スゴすぎ!! この様に絶大な効果が得られます。 PICMX220F032Bだと全然無理と思われたプロジェクトも余裕で使えることになりました。(注10) おしまいっ!! (オイ * PIC32MX250F128Bを使う Flash=128KB, SRAM=20KByte PIC32MX250F128B 483円 http://jp.rs-online.com/web/p/microcontrollers/7680836/ というわけで、いろいろ気にしたくない場合、上記のマイコンを使えばスッキリします。 最終的にFlash=32KByte SRAM=8KByteで収まるならPICMX220F032Bにダウングレードするという 方が楽ちんですね。 * C32に未来はない! 現在、MicrochipはC32に変えてXC32コンパイラを推奨している。 C32のフォルダを探索してみると、v2.02aの最も新しいファイルの最終変更日付が2011/11/28である。 もう1年以上も放置されていることになる。 残念ながらC32は既に捨てられたと考えるの妥当だ。 従って、C32をメインで使用するなら、最新のXC32で提供されているヘッダファイルやペリフェラルライブラリのソースコード とC32内のそれらと比較チェックが必要だろう。 参考ページ: irukaさんのページ PIC32MX http://hp.vector.co.jp/authors/VA000177/html/PIC32MX.html (注1) ARM7のThumbコードのイメージ。 (注2) 使用の可否はGCCマニュアル参照 (注3) この機能は、一般的なGCCなら使える可能性があって、 ソースコード内(任意の場所から、〜までとか)でコンパイル・オプションを変更可能なので、 ある状況下では非常に便利です。(括弧内に任意のコンパイルオプションを指定出来る。)(注2) (注5) コンパイル時の警告がうっとうしい場合は変更しても良いかもしれませんが、最適化が効かなくなります。 (注6) IDEの再起動、又はコンパイラ・オプション画面を出して「Apply」が必要。 (注7) 注意ポイントとして、mips16化コードは実行速度が30%程度低下する。 (注8) 60日試用期間を有効にしてもかまいませんが、ここでは60日経っても状況が変わらないように 配慮しています。60日後に「そんな話聞いてないっ!!」とならない様に。(オイ (注9) 一般的な最適化グループ項目の詳細はGCCのマニュアルにある。 (注10) 動くかどうか試してないけど、普通は大丈夫だと思います。(^^; (注11) 実はビミョ〜に変化する場合もありますが、微妙なので無視します。
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(4) | PIC32MX | このブログの読者になる | 更新情報をチェックする

2012年06月06日

秋月でPIC32MX 28pin DIP版出る

秋月でPIC32MX 28pin DIP版出る
* はじまり
2012/06
http://akizukidenshi.com/catalog/c/cpic32_dI_ssp/
秋月で、なんと、28pin DIP 300mil の32ビットマイコンPIC32MXが、
さらに、なんと 32KByte + USB機能付で220円ポッキリという
いわゆる、「秋月価格」で販売開始された。

PIC32MX220F032B
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en556007

ちなみに、メーカ直販価格は2012/06時点で、1個 216円(80円/$)=$2.7、 
1000個以上で1個 168円(80円/$)=$2.1
http://www.microchipdirect.com/ProductSearch.aspx?keywords=PIC32MX220F032B-I/SO

少し前にARM Cortex-M0 の 太めな28pin DIP 600mil タイプがあったけど、このPIC32MX220の300milの
ほうが小さくて良いね。Coretex-M0 DIPも秋月に置いて欲しいけど。

より大容量型:
以下の様に同じ28pin DIPの大容量型も存在するので、これらも秋月価格でだしてほしいね。

    28pin DIP   Flash, SRAM, 
PIC32MX230F128B 128kb, 32kb, USB
PIC32MX250F064B  64kb, 16kb, USB

http://www.microchip.com/maps/microcontroller.aspx

* PIC32MX用コンパイラ
コンパイラは、
1, MPLAB系に付いてくる「pic32-gcc」、
2, Pinguinoプロジェクトで配布している「mips-gcc」(無料)、
  gcc version 4.5.2
  これはPinguinoをインストールすると自動でインストールされる。
  http://avr.paslog.jp/article/2477815.html
   Pinguino X.3なら
   C:\PinguinoX.3\win32\p32\bin
   に実行パスを通せばコンパイル可能。リンカスクリプトやビルドスクリプトは
   一度Pinguino上でコンパイルすると、
   C:\PinguinoX.3\source
   に生成されるので参考になる。
3, Sourcery Codebench Lite MIPS ELF
   gcc version 4.6.3
   mips-sde-elf-gcc
   mips-sde-elf-g++
   後述。 調査中。
4, Chipkit IDEに付属のgcc
   調査中。
   https://github.com/chipKIT32/chipKIT32-MAX/downloads
   mpide-0023-windows-20120903.zip (Windows用)をダウンロード、解凍します。
   

これらのgccは同じgccから派生した物と思われます。
比較はこれからだけど、最適化制限のあるMPLAB系のgccよりも最適化制限のない
その他のgccのほうがFlashサイズが小さくなる可能性が高い。
16bit長のコード生成 / mips16e:
『はじめて読む MIPS(リローデッド)』 by 中森章
http://www.cqpub.co.jp/interface/TechI/Vol39/app/mips_asm.pdf
が非常に参考になります。

ARMのThumbコードと同様に16bit長のコード生成が可能で、実行速度は落ちるものの
Flashサイズを激減させることが出来る。
今回のPIC32MX220等には必須だろう。

mips-gcc -Os -mips16 main.c 
の様にコンパイル時に「-mips16」オプションを付ける。
リンク時にも付ける。

MPLAB IDEの場合、コンパイルオプションの設定で、
General - 「Genarate 16-bit code」にチェックを入れる。
コードの最適化は、「-Os」にしておく。(最適化の期限切れのはずだけど、なぜか多少の効果がある)

アセンブラ出力で確認する:
MPLABなら
pic32-objdump -h -S main.elf  > main.lst 
mips gccなら
mips-objdump -h -S main.elf  > main.lst 
とELFファイルからアセンブラ出力が得られるので、実際の16bit長のコード、
32bit長のコードの使われ方が確認できる。

*OpenOCD/JTAGでPIC32MX220に書込み&デバッグ
以下のスレッド、まだ全部読めてないけどPIC32MX220F03Bは既に
OpenOCDで対応済み風。
http://www.mail-archive.com/openocd-devel@lists.sourceforge.net/msg01059.html
なので、JTAGアダプタさえあればPickit3なしでもFLASH書込み&デバッグが今すぐ
出来る可能性が高い。
28pinしかないのでちょっとつらいけど、
Pingunoプロジェクトの
http://avr.paslog.jp/article/2477815.html
PIC32MX220用のブートローダがそのまま使えるらしいので、
最初にブートローダだけ書いて使うという手が良いかも。
ついでにPinguinoも試せる。

* PIC32MX220のエラッタ
http://ww1.microchip.com/downloads/jp/DeviceDoc/jp556114.pdf
2012/06現在入手できるのは、たぶんリビジョン「A0」か「A1」のはず。
(エラッタは今のところ11個)
ちなみに、このリビジョン「Ax系列」はかなり初期の段階で、これから修正が
入るのと新たなバグが発見されて「Bx系列、「Cx系列」に移行して行くと思われる。

エラッタは全部熟知したほうが良いわけだけど、なかなか大変。
自分的にハデ目なものを挙げてみる。
(以下はざっくりめなので詳細はエラッタ参照のこと)

(1)CPUの書込みサイクル・バグ
  通常、CPUの書込みサイクルの初期段階で「割込みが入る」と、
  (a)  書込みサイクルキャンセル(或いは保留?) 
  (b)→ 割込み処理開始 → 割込み終了
  (c)→ キャンセルされた書込みサイクル開始
という形になるが、(a)部にバグがあって
「書込みサイクルがキャンセルされずに実行されてしまう」ので
 結局、余分に書込みが発生してしまうのだ。orz
問題:
  書込み先がメモリなら無問題なものの、SPI,I2C,UARTなどの送信レジスタ
  だった場合、同じデータが2度送られるという凶悪なバグが発生する。
  (PMPも同様らしい)

対策:
  送信レジスタに書く前に必ず割込みを禁止する。
  又は、送信にDMAを使えば避けることができる。

orz

エラッタは読んだ方が良い。
まず、エラッタを読む。

* pic32prog: PIC32MX220をPickit2/Pickkit3で書き込む
このソフトを使うと
http://code.google.com/p/pic32prog/
Pickit2で標準サポートされていないPIC32MX群への書込みが
できるらしい。
Windows/Linuxで動作可能の様だ。

ここ数日(2012/06/19)で大きく変わっていて、
(1)Pickit2/Pickit3対応
(2)WindowsではUSB HID対応となり、LibUSB-Win32のドライバは不要となった。
(3)LinuxはLibUSBベース
(4)デバイスIDの誤記修正
(5)書込み速度の改善
等々、良い感じになってきた。

特にWindows用がHID直接タイプになったので非常に使い易い。
(ドライバのインストール不要で、pic32prog.exeを実行するだけ)

コンパイル済みの実行ファイル:
http://code.google.com/p/pic32prog/source/browse/trunk/pic32prog.exe
実は上のリンクから実行ファイルが取得できないので、
こちらで取得したものを置いておきます。
解凍するといろんなファイルに混じってpic32prog.exeが出てきます。:D
pig32prog_src_pack_2012017.zip
これは、うまく書込みできないのでirukaさんのページのものを取得してください。
PIC32MXについて(概要) 
http://hp.vector.co.jp/authors/VA000177/html/PIC32MX.html

使い方:
http://code.google.com/p/pic32prog/wiki/README



* pic32prog はダメだった orz 2012/11 
このソフトで実際に「Pickit2」からPIC32MX220F032Bへ書き込んでみたものの、
LEDチカチカさえ出来なかった。orz
ソースを見るとコンフィグファイルの書込み部分に難ありな感じでした。
素直にPickit3を買った方が良いかも。 orz
(2013/02)
Programming pinguino 32 PIC32MX220 hid bootloader not responding
http://code.google.com/p/pic32prog/issues/detail?id=5&sort=-id
上のページでも同様にコンフィグ部分に不具合があると指摘されている。
上のページから得られるファイルにPic32progで書き込めるPinguino 32のブートローダファイルが
あるので、そのうち試してみよう。
(2013/02)
irukaさんの改良版pic32progで見事書込み&LEDチカチカ成功しました。
大感謝 m(__)m

ようやくスタートラインに立てたもののすでにモチベーションが...(爆

*UBW32プロジェクト
というのもあるらしい
http://www.schmalzhaus.com/UBW32/


* 最適化制限のない CodebenchのMIPS, コマンドライン コンパイラ
CodebenchもMIPS用のコンパイラを出しているので、MPLAB(X)のコンパイラに付属の
PIC32MXマイコン用ヘッダファイルやリンカスクリプトを使えば、
最適化制限なしでコンパイルできるんじゃないかと思います。
Sourcery CodeBench Lite Edition for MIPS ELF 
https://sourcery.mentor.com/GNUToolchain/subscription3537?lite=MIPS
のページに入って、「IA32 Windows Installer」を選択。
ダウンロードは登録が必要。

探査中。




参考文献:


参考:

1個200円のマイコンに書き込むために約4000円のライタが売れまくるという戦略。
も、あるにはある。(爆


検索キー: pic32 pic32mx pic32mx220 PIC32MX220F032B Pickit2 Pickit3 pic32prog errata エラッタ Pinguino
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(17) | PIC32MX | このブログの読者になる | 更新情報をチェックする