ブログ - 最新エントリー

扱っているマイコンボードは多岐にわたっているのと、時期によってデザイン思想が変わっている事もあり、ブートローダの挙動がどれもまちまち。とりあえずXMODEMによるバイナリファイル転送という点は共通化されたのだが、ブートローダへ入る方法が気まぐれ過ぎる。
なにか安直な方法はないかとデータシートをまじまじ眺めていると、どのチップも起動直後の条件を取得できる様である。つまり、電源ON一発目なのか、ウォッチドッグでリブートしたのか、ソフトリブートしたのか、外部からのリセット信号でリブートしたのか等々。
そろそろお目見目する予定のDIGITUSシリーズはUSB接続が前提となるので、コンソールから何かしらのシグナルを送ることはちょっと考えにくいし、もともとピン数が少ないところに態々スイッチなんてのも流行りじゃない。

結論から言ってしまうと、「リセットボタンを押したらブートローダに入る」ということ。これが一番確実で、ユーザアプリケーションで想定されるプログラムとの競合も少ないハズ。
ひとまずATmegaが載った輩がコードサイズ的に厳しいので、試しに入れてみた。結果は良好。いままで「!」を連打してた手間も省けていいかんじ

ということで、勝手ながら今後のブートローダの仕様を変更させていただきますので、びっくりしないでくださいね。

技術

最近のネタ

カテゴリ : 
新商品
2013-6-26 16:51
ここ最近マイコンボードシリーズの終了ばかりで新しいものがないというご意見が。
実際には無いという訳ではなくて、お客様のご要望に合わせたカスタム製品が主になっており、GCC Developer Liteのターゲットにはあるにもかかわらず、実機が存在しないといったケースはそういったものに該当しています。
そういった都合もあり、汎用的に使用できる製品をご用意するところまでに至っていません。
ごめんなさい。

かといって終了品ばかりになってしまいますと次世代の潮流を創出できないといったこともありますので、いくつか準備中です。
  • ATmega32マイコンボード
    外部端子に旧来との互換性を持たせ、RS232Cコネクタを廃止。
    代わりにUSBシリアルチップを装備、USBバスパワーで駆動可能。
    ArduinoでよくやられるRTS/DTRによるリセット発行は、USBの活性時にこきたない挙動を示すのでCBUS経由。
  • ATmega128マイコンボード
    こちらも外部端子の互換性ありで、RS232Cコネクタを廃止。
    USBポートを装備してバスパワー駆動サポート。
    使用頻度の少ないと思われる外部SRAMはランドだけ残して未実装。
  • SAM3S
    AT91SAM7Sシリーズの後継としてcortex-M3を内蔵したSAM3Sを採用。
    AT91SAM7Sシリーズとは ハード的に互換性がない小型新シリーズ。
    今まで2列だった外部端子を、ブレッドボードなどで試しやすい1列に
  • STM32F3
    coretex-M4Fを内蔵。こちらも小型でノリはSAM3Sと一緒。
    出すか出さないかは私次第。

その他、

  • ユニバーサルドライバ3.5
    特に拡張性が向上するといったこともなく、基本的にソフト的・電気的に互換性あり。
    取り付けサイズコンパチだが、レイアウトの大幅変更あり。
    USBコネクタがminiタイプ。
    耐性向上の都合からコストアップ
  • beaglebone USB cape
    任意の外部電源の入力、USBハブ搭載で拡張性アップ。
    専用のサーバアプリを使用して、アプリケーション間のデータを共有。
    matlab/simulinkのコードをマジ簡単に組み込み可。

といったところです。

詳しくは今後のリリース情報をお待ちください。

技術部

既にイベントは終了しましたが、ROBO-ONE ARCで使用したサーバアプリケーションにて実証実験をかねて標準化APIを使用してマルチプラットホーム化された環境を提供しました。

サーバがサポートしたターゲットは以下の4種類です。
  1. テクノロード Go Simulation!
  2. 近藤科学 KRSシリーズ(ICS3.0/3.5)
  3. 双葉電子 RSシリーズ
  4. ROBOTIS Dynamixelシリーズ
具体的には、各社様にてアクチュエータを3台使用した簡易的なアームロボットを構成し、各々の差異はサーバにて吸収する事でユーザアプリケーションからは各軸への角度指令・角度取得・負荷取得といった情報をアクチュエータの違いを意識せずに使用できるという環境を提供しました。


基本的なアクチュエータとホスト間の呼び出し規約をAPIとして共通化した事により、サーバ内のAPIを使用したコーディングはメーカの差異をあまり意識せずに移行する事が確認できました。

今回標準化の成果物として、各社向けAPIのバイナリ(dll)と簡単なサンプルコードを以下に公開いたします。詳細は同梱のpdfをご参照ください。

ROBO-ONE Standard API V1

なお、Dynamixel用のAPIも本標準化に伴い更新版が同梱されているため、こちらのページのドキュメントおよびソースも修正いたしました。合わせてご活用ください。

技術部

アライメント

カテゴリ : 
雑記
2013-2-21 20:19
typedef union {
  struct {
    char        a;
    uint16_t  b;
  };
  char  dat[3];
} __attribute__ ((packed)) stTest;
このstTestは何故か4バイトで扱われる。
内側の構造体をPACKしていないことに気が付くまで、5分程頭を悩まされる。
typedef union {
  struct {
    char        a;
    uint16_t  b;
  } __attribute__ ((packed));
  char  dat[3];
} __attribute__ ((packed)) stTest;
これで3バイトとして使えるようになった。

N7とN8の違い

カテゴリ : 
その他
2012-12-28 18:00
RX62Nターゲットの検証を行うためInterface誌の2011年5月号の付属RX62Nマイコン基板を使用したが、コンパイルから実行まで問題なく終了したのは以前紹介した通りで、選択したターゲットは「RX62N(512k Flash)」であった。すなわちR5F562N8を対象としている
ところが、Interface誌に付属していたRX62NはR5F562N7となっており、両者の違いは以下に挙げた内蔵メモリのサイズという事になっている。
型名 ROM容量 RAM容量
R5F562N8
512K (0xFFF80000 - 0xFFFFFFFF) 96K
R5F562N7 384K (0xFFFA0000 - 0xFFFFFFFF) 64K
アドレスも異なるため、この範囲を超えた場合は書き込むこともできないはずだが、どのツールも実機も何の文句も言わずに動いてる。RAMも同様に96kを想定していて、ダンプしてみても確かにそこにRAMはある。

この表の通りであれば、動かないという結果が得られるのがフツーだと思うのだが・・・。謎だ。

新ターゲットであるRX62Nを検証する

カテゴリ : 
その他
2012-12-27 17:00
GCC Developer Liteに新規追加されたターゲットRX62Nの検証を行ってみた。
環境は以下の通り。
対象: Interface誌2011年5月号付録RX62Nマイコンボード
ホストOS: Windows8
コンパイラ: 設定リストから「RX62N(512k Flash)」を選択
書込みツール: Flash Writer (FT230XのUSBシリアル変換を介してSCI1にTTLで直結)
#include <RX62N.h>
#include <us.h>
#define EI __builtin_rx_setpsw ('I')
void main (void) {
static char txb[100],rxb[100];
EI; // 割り込み許可
PORT3.ICR.BIT.B0 = 1; // P30の入力バッファを有効
PORT3.DDR.BIT.B0 = 0; // P30を入力ポートに指定
PORT1.DDR.BIT.B5 = 1; // P15(LED)を出力ポートに指定
// SCI1をライブラリで初期化
sci1_int_init (3000000, txb, sizeof(txb), rxb, sizeof(rxb));
sci1_int_printf("hello!!\n");
while (1) {
sci1_int_putc (sci1_int_getc ()); // エコーバック
PORT1.DR.BIT.B5 ^= 1; // LED反転
}
}
上記は今回検証用に作成したプログラムで、割り込みを使ったシリアル通信を行うAPIを呼び出し、単純にエコーバックしている。

コンパイルされたmotファイルのサイズは小さいのだが、Flash Writerによる書き込みにやけに時間がかかる。USBシリアル変換でSCI1へTTL直結という事もあり、書き込みの際のボーレートを750kbpsまで上げたら我慢できるスピードになった。
作者曰くmotファイルで更新されるエリアだけではなく、フラッシュ全域に転送しているとの事。無駄な事を・・・。

とりあえず書き込んだプログラムは意図したとおり動作している。


実は問題点というより動いている事に疑問が出てきたのだが、それは又の機会に。
ついでと言っては失礼だが、双葉電子工業株式会社製のRSシリーズも新しいFDIIIライブラリを使う事で扱えるという事で、ID=1に位置を指令してさらに現在位置を取得するプログラム。
位置情報に符号があるのが特徴。 
#include <fd.h>
void main (void) {
int16_t now = -1500, p;
// ポートオープン
RS_ChangeBaudrate (230400);
// モータON
fd_RSEnableControl (1, true);
while (!fd_GetPB ()) {
// 位置指令
RS_WriteWordData (1, RS_ADDRESS_GOAL_POSITION, now, 10, NULL);
// 位置取得
RS_ReadWordData (1, RS_ADDRESS_PRESENT_POSITION, &p, 10, NULL);
fd_printf("goal pos=%5d, present pos=%5d\r",now, p);
now += 5;
if (now > 1500) now = -1500;
fd_Wait (10);
}
// モータOFF
fd_RSEnableControl (1, false);
}
もうちょっとで公開です。
先にお知らせした内容の問い合わせをいただいたので、ちょっと出し。

ICS3.0ないし3.5の近藤科学社製モータであればOK。残念ながらボーレートの誤差が抑え切れない都合から、最大通信速度が115.2kまでの対応。
ICS対応のサーボモータは制御する上での情報がメモリマップとして提供されていないため、FDIIIライブラリ内に以下の様な仮想メモリマップを構成し、それらに対してAPIからアクセスするといった方式を採用。
仮想アドレス データ サイズ
 0 モータフリー 1 byte
 1 指令位置 2 byte
 3 現在位置 2 byte
 5 電流 1 byte
 6 温度 1 byte
サーボモータのEEPROM領域の割り当ては無い。

主なAPIを以下に抜粋。
  • ホストボーレート変更
    bool KRS_ChangeBaudrate (uint32_t baudrate)
  • バイト書き込み
    bool KRS_WriteByteData (uint8_t id, uint8_t adr, uint8_t data, uint32_t timeout, uint16_t *errcode)
  • ワード書き込み
    bool KRS_WriteWordData (uint8_t id, uint8_t adr, uint16_t data, uint32_t timeout, uint16_t *errcode)
  • バイト読み出し
    bool KRS_ReadByteData (uint8_t id, uint8_t adr, uint8_t *data, uint32_t timeout, uint16_t *errcode)
  • ワード書き込み
    bool KRS_ReadWordData (uint8_t id, uint8_t adr, uint16_t *data, uint32_t timeout, uint16_t *errcode)
  • 同期書き込み
    bool KRS_WriteSyncData (uint8_t *data, uint8_t size, uint16_t *errcode)

IDと仮想アドレスを指定して各APIを呼べば、適宜ICSのプロトコルに変換してサーボモータとおしゃべりしてくれる。

例としてID=0のサーボモータに位置を指令してさらに現在位置を取得する事を繰り返すプログラムを作ってみた。少しだけ紹介していないAPIも使っているが、そこそこシンプルでしょう。

#include <fd.h>
void main (void) {
uint16_t now = 0, p;
// ポートオープン
KRS_ChangeBaudrate (115200);
while (!fd_GetPB ()) {
// 位置指令
KRS_WriteWordData (0, KRS_ADDRESS_GOAL_POSITION, now, 5, NULL);
// 位置取得
KRS_ReadWordData (0, KRS_ADDRESS_PRESENT_POSITION, &p, 5, NULL);
fd_printf("goal pos=%5d, present pos=%5d\r", now, p);
now += 10;
if (now > 16383) now = 0;
fd_Wait (10);
}
// モータOFF
fd_KRSEnableControl (0, false);
}
USBを使用したサードパーティのinfファイルは、Windowsに用意されたUsbser.sysドライバを参照する事が多いと思います。GCC Developer Liteにおいても、AT91SAM7Sマイコンボード用(FDIII-HC, UD3含む)とSAM3Sマイコン用(MIO含む)にinfファイルが用意されています。

ところが、Windows 8(x64)ではデフォルトでinfファイルにデジタル署名がなされている事が前提となっており、デベロッパにとってWindows 8を採用する際の妨げとなっている様です。Windows 7より以前であればドライバのインストール時にデジタル署名を無視する事で適用できましたが、Windows 8ではがんとして拒否します。

それでは使い物にならないという事で、備忘録がてらWindows 8においてデジタル署名が無いinfファイルを適用する際の最も簡単な手順を以下に示します。

  1. コマンドプロンプトを管理者権限で起動。
     
  2. bcdeditコマンドで次回起動時の設定変更を行った後にWindowsを再起動。

    bcdedit /set {current} onetimeadvancedoptions on


     
  3. 再起動後スタートアップ設定画面になるので、7)の「ドライバー署名の強制を無効にする」を選択。

     
  4. 普通にログインし、認識させたいUSBデバイスをPCに接続して通常通りドライバをインストール。途中Windowsのセキュリティメッセージダイアログボックスが表示されたら、「このドライバーソフトウェアをインストールします(I)」を選択。この間Windowsを再起動してはいけません。


これ以後は特殊な操作無く、今迄通りデバイスが使用できるようになるはずです。再起動の度にこれらの作業をする必要はありませんが、接続するUSBポートを変更した場合は再度同じ方法でドライバをインストールしなくてはなりません。

なお、既にBCDにadvancedoptionsが登録されていると、本手順でスタートアップ設定画面にならない様です。その場合は、該当のエントリオプションを手動で削除しておきましょう。

近々GCC Developer Liteを更新します

カテゴリ : 
雑記
2012-12-10 19:04
長らく汎用版の更新がなされていませんでしたが、近々アップデートします。
外観は何ら変わりはありませんが、追加されるターゲットが大幅に増えるため、少しだけ予告を兼ねてお知らせします。

<FDIIIライブラリ>
FDIII用のライブラリがサポートするデバイスは従来のDynamixelシリーズに限られていますが、近々公開しますGCC Developer LiteではMXシリーズにも対応します。勿論新旧やI/Fが違っていても混在した状態で利用する事ができます。

また、ROBO-ONEにおける標準化の一環として、アプリケーションのレイヤから各社のアクチュエータ(シリアル通信対応に限る)へアクセスする方法を決定した事もあり、組み込みデバイスにもそれを展開すべく、FDIII-HCのライブラリとして新規に以下のアクチュエータをサポートする事になりました。

・近藤科学社製
KRS-2552RHV ICS, KRS-2542HV ICS, KRS-4031HV ICS, KRS-4032HV ICS, KRS-4034HV ICS, KRS-4033HV ICS, KRS-6003HV ICS
※ICS3.0及びICS3.5かつ115.2kbpsに限定

・双葉電子工業株式会社製
RS601CR, RS401CR, RS402CD, RS405CB, RS406CB, RS301CR, RS302CD, RS303MR, RS304MD

なお、今回のアップデートにおいては、これらアクチュエータに対する直接的なアクセスAPIの提供のみで、互換性を優先としたためにFDIII-HCならではのモーション等のAPIのサポートは含まれません。

<Atmel SAM3Sターゲット>
AT91SAM7Sの後継としてcortex M3コアを搭載したマイコンボードを一部にリリースしており、マイコンボードを販売する予定もある事から、先行でパブリック版に同梱します。コンパイル済のToppersカーネルも含みます。
AT91SAM7Sとほぼピンコンパチのデバイスを対象としています。

<Renesas RX62Nターゲット>
既に一部に公開していますが、ご要望が多いためにパブリック版に同梱する事とします。
H8シリーズと同程度の最低限のサポートファイル(スタートアップルーチン・ペリフェラルヘッダ・シリアル通信)で構成されます。
また、FLASH WRITERにてRX62NのSIOを介した内蔵フラッシュへの書き込みをサポートします。

<STMicroelectronics STM32F2ターゲット>
こちらも一部に公開していますが、F4の登場もありF2はある程度機能が枯れ始めたので同梱することにします。コンパイル済のToppersカーネルも含みます。
最低限のサポートファイル(スタートアップルーチン・ペリフェラルヘッダ)で構成されます。

その他コンパイラ本体の更新や各ターゲットの微修正等が含まれます。
公開までもう少しお待ちください。

技術サポート