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 用のクロスコンパイル環境は、以下の通りで作成してみました。

binutiles-2.x.x.tar.bz2, gcc-core-x.x.x.tar.bz2, newlib-x.x.x.tar.bz2は、/usr/local/spoolにあるとします。
binutiles ( version 2.17.0 の場合の例 ; 特にバージョン依存性無し )
% cd /usr/local/src
% tar xvfj ../spool/binutiles-2.17.0.tar.bz2

% mkdir binutiles_mipsel_semb
% cd binutiles_mipsel_semb
% ../binutiles-2.17.0/configure --target=mipsel-semb-elf --prefix=/usr/local
% make
% make install
gcc ( version 4.1.2 の例 ; 3.x.x の場合、configure 時の --disable-libssp は削除 )
% cd /usr/local/src
% tar xvfj ../spool/gcc-core-4.1.2.tar.bz2
% mkdir gcc_mipsel_semb
% cd gcc_mipsel_semb
% ../gcc-4.1.2/configure --target=mipsel-semb-elf --prefix=/usr/local --disable-libssp \
--with-newlib --enable-languages=c --disable-threads --disable-shared --without-include-headers
% make
% make install
newlib ( version 1.15.0 ; 特にバージョン依存性無しですが、gcc との組み合わせが重要。 )
% cd /usr/local/src
% tar xvfj ../spool/newlib-1.15.0.tar.bz2
% mkdir newlib_mipsel_semb
% cd newlib_mipsel_semb
% ../newlib-1.15.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/


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

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


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

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

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


ライブラリを作ろう!

  1. マニュアル(ココからダウンロードしてください)
  2. 実際のライブラリ(gcc-3.4.6 用は ココから、gcc-4.1.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. プレステコントローラ接続