SEMB1200A (1200MIPS CPUボード)

(2006年 1月 1日〜 (C) 岡田 紀雄)

とあるきっかけで出会った SEMB1200A ボードを試験的に使わせていただきました。
全ての案件に関して著作権を主張します。

記載しているソフトウェア、ハードウェア(回路)にて何がしかのトラブルが発生しても、当方(岡田)は責任を負いかねますので、各自の責任の下、行っていただきますよう、よろしくお願い致します。 不安な点等ありましたら、メール等頂けると、当方がわかる範囲内でお答えできるかもしれませんので、よろしくお願い致します(忙しく返信が遅れる場合がありますが、ご了承願います)。

本 Webページ をきっかけに多くの方に使って頂き、あっと驚く世界を体験していただけると幸いです。


ニュース
 MIT(マサチューセッツ工科大学)さんのワークショップにて SEMB1200A が採用され、近藤科学さんのKHR2HVの背中に乗っかりました。
 開発に際しては、当ページが採用されたということで、少しずつですが書いておいて良かった、と思いました。


概要

CPU ボード
  • サイズ 50mm x 70mm (x11mm部品凸部含む)
  • 基板4隅穴 2.1mmφ
    (横 66.04mm x 縦 45.72mm ピッチ)
    (横 2.6inch x 縦 1.8inch ピッチ)
    (→ 2.54mmスルーホール基板で 26 x 18)
  • 電源は 5.0〜9.5V でバッテリー直結時は
    適宜DC-DCコンバータを介すこと

 性能概略(詳細は、販売元Webをご覧下さい)
  ・ 1200MIPS (浮動小数点演算ユニット(FPU) 内蔵)
  ・ 高速内蔵 512Kバイト RAM
  ・ 大容量フラッシュROM 4Mバイト搭載
  ・ 高性能サーボコントローラ搭載(PWM 32ch, 拡張UART 8ch(拡張UARTはPWM24-31ch と排他的に使用))
     △ ダブルバッファリングされた独立32chPWM回路によりジッターなしを実現できます。
  ・ UART2ch (RS232C, RS485 レベル変換あり), CSI(SPI) 1ch
  ・ 汎用 8ch I/O


製造元

 シマフジ電機(株)


パーツを購入しよう

 このボードの小型化に貢献しているのがコネクタ。
 コネクタはJST (日本圧着端子製造(株))ショッピングサイトで通販購入が可能でした。

 また、圧着端子付きケーブルは、RSコンポーネンツ(株)で購入可能でした。 該当商品を列挙します。


開発環境を構築してみよう

 開発環境は、フレキシブルに対応するために、Cygwin上や Linux上で行うのが一般的ですが、MinGW Developer Studio でも環境構築することができました。
 以下では、Cygwin 上の場合と MinGW Developer Studio 上の2種類について紹介します。
 統合開発環境(っぽい)ものが欲しかった、という方は、Cygwin編を飛ばして、MinGW Developer Studio 編から行ってください。

 MinGW Developer Studio は Parinya Software から提供いただいているフリーソフトウェアで、MinGW をベースに作られた Windows, Linux, FreeBSD 上で動作する統合開発環境です。


開発環境を構築してみよう 〜 Cygwin編

 mips 用のクロスコンパイル環境は、以下の通りで作成してみました。

pattern    binutils gcc gmp mpfr gcc configure 時のオプション
(共通 --with-newlib --disable-threads --disable-shared)
newlib
cygwin 1.5 2.16 3.4.6       1.9.0
cygwin 1.5 2.17.1, 2.19 4.1.2     --disable-libssp 1.15.0, 1.16.0 1.17.0
cygwin 1.5 2.19 4.2.4     --disable-libssp 1.17.0
cygwin 1.5 2.19, 2.19.1 4.4.1 4.3.1 2.4.1 --disable-libssp --with-gmp --with-mpfr 1.17.0, 1.18.0
cygwin 1.5 2.20 4.4.3 4.3.2 2.4.2 --disable-libssp 1.18.0
May 6/'11 cygwin 1.7 2.21 4.5.3 --disable-libssp 1.19.0
MinGW(msys) 2.17.1, 2.19 4.2.4     --disable-libssp 1.9.0
May 6/'11 MinGW(msys) 2.21 4.5.3 4.3.2 2.4.2 --disable-libssp 1.19.0
ダウンロードしたファイルは、/usr/local/spool にあるとします。
binutiles ( version 2.21 の場合の例 ; 特にバージョン依存性無し )
% cd /usr/local/src
% tar xvfj ../spool/binutiles-2.21.tar.bz2
% mkdir mipsel-semb/binutiles-2.21
% cd mipsel-semb/binutils-2.21
% ../../binutiles-2.21/configure --target=mipsel-semb-elf --prefix=/usr/local
% make
% make install
gmp ( version 4.3.2 の例 )
% cd /usr/local/src
% tar xvfj ../spool/gmp-4.3.2.tar.bz2
% mkdir cygwin/gmp-4.3.2
% cd cygwin/gmp-4.3.2
% ../../gmp-4.3.2/configure --prefix=/usr
% make
% make install
mpfr ( version 2.4.2 の例 )
% cd /usr/local/src
% tar xvfj ../spool/mpfr-2.4.2.tar.bz2
% mkdir cygwin/mpfr-2.4.2
% cd cygwin/mpfr-2.4.2
% ../../mpfr-2.4.2/configure --with-gmp-include=/usr/include --with-gmp-lib=/usr/lib --prefix=/usr
% make
% make install
mpc ( version 0.9 の例 )
% cd /usr/local/src
% tar xvfz ../spool/mpc-0.9.tar.gz
% mkdir cygwin/mpc-0.9
% cd cygwin/mpc-0.9
% ../../mpc-0.9/configure --with-gmp-include=/usr/include --with-gmp-lib=/usr/lib --prefix=/usr
% make
% make install
gcc ( version 4.5.3 の例 ; 3.x.x の場合、configure 時の --disable-libssp は削除 )
% cd /usr/local/src
% tar xvfj ../spool/gcc-core-4.5.3.tar.bz2
% mkdir mipsel-semb/gcc-4.5.3
% cd mipsel-semb/gcc-4.5.3
% ../../gcc-4.5.3/configure --target=mipsel-semb-elf --prefix=/usr/local --enable-languages=c \
 --without-include-headers --with-newlib --disable-threads --disable-shared --disable-libssp
% make
% make install
newlib ( version 1.19.0 の例; 特にバージョン依存性無し。ただしMINGW+MSYSでは展開先ディレクトリでmake要)
% cd /usr/local/src
% tar xvfj ../spool/newlib-1.19.0.tar.bz2
% mkdir mipsel-semb/newlib-1.19.0
% cd mipsel-semb/newlib-1.19.0
% ../../newlib-1.19.0/configure --target=mipsel-semb-elf --prefix=/usr/local
% make
% make install

             Cygwin               http://cygwin.com/
             GNU                  http://www.gnu.org/
             GCC                  http://gcc.gnu.org/
             newlib                http://sources.redhat.com/newlib/
             mpc                   http://www.multiprecision.org/


プログラムを書いてコンパイルしてみよう! 〜 Cygwin編

※ flashrom に書かれた flashwriter のバージョンに依存する部分がありますので、ご注意下さい。
※ libsemb.a を作ることが前提になります。 crt0.o(crt0.c) もそのライブラリに入ってますので、ここでは紹介を省略します。


開発環境を構築してみよう 〜 MinGW Developer Studio 編

統合環境上のみでは .out(ELF)ファイルまでは作成可能ですが、.bin が作れませんので、mipsel-objcopy という変換ソフトを用意しました!

以下の手順で、ファイルをダウンロードして、インストール実施してください。 また、mipsel-semb-elf の環境には、下記の「ライブラリを作ろう」のライブラリも構築済みですので、直ぐに使えます。 ドキュメントは共通です。


ライブラリを作ろう!

  1. マニュアル(ココからダウンロードしてください)
  2. 実際のライブラリ(Rel.3 ココ からダウンロードしてください(旧版:Rel.1 ココ, Rel.2 ココ)。)
  3. UART1 を FIFO 有効化しておこう。

いろいろと周辺を揃えていこう!

  1. 近藤科学(株)製 KRS (RedVersion) シリーズ PWM 入出力
    1:      #include        <semb1200a/ux1200e.h>
    2:      #include        <semb1200a/semb1200a.h>
    3:      #include        <semb1200a/ux_signal.h>
    4:      
    5:      void            main( void )
    6:      {
    7:		int		unit, port;
    8:		unsigned short	up, down, width;
    9:
    10:             init_pwm_irq();
    11:             init_pwm_unit_all();
    12:             pwm_count_enable_all();
    13:     
    14:             pwm_set( unit, port, up, down );
    15:		width = pwm_get( unit, port );
    16:     } 
    • タイマー等は推奨値なら int_pwm_unit_all() で設定完了
    • PWM 出力設定は関数1つ。
      pwm_set( unit, port, up, down );
      • unit : PWM 接続コネクタ (0-3)
      • port : 上記 unit のポート(0-7)
      • up : PWM アップトリガ数
      • down : PWM ダウントリガ数

    • キャプチャ設定は関数1つ。
      width = pwm_get( unit, port );
      • width : 入力された PWM(H幅) のカウント数
      • unit : PWM 接続コネクタ (0-3)
      • port : 上記 unit のポート(0-7)

      ※ 詳細はマニュアルを見てね(整備中ですが。。。)

  2. 1線で双方向送受信シリアル通信サーボ(プロトコルそのものはメーカーサイトを参照) (KRS-4014HV(*) など)
  3. プレステコントローラ接続