エレファイン

セットアップ



インストールすることにより割り当てられたCOMポートに対して、データを送受信することにより、USB-ISSへのコマンド送信・I2C等のデバイスへのデータ送受信を行うことができます。
まず、I2C、SPI、UART等のデバイスと通信を行う前にUSB-ISSの設定を行います。

セットアップコマンド
USB-ISSコマンド (0x5A) は、USB-ISSの初期設定を行うために使います。3種類のサブコマンドがあります。

コマンド サブコマンド 説明
USB-ISS (0x5A) ISS_VERSION
(0x01)
3バイト返信されます。

1バイト目 モジュールID(常に7が返される)

2バイト目 ファームウェアバージョン(現在2)

3バイト目 現在の動作モード
USB-ISS (0x5A) ISS_MODE (0x02)
I2C、SPI、UART等の動作モードを設定します。詳細は、次のセクショ
ンを参照してください。
USB-ISS (0x5A) GET_SER_NUM
(0x03)
8バイトのユニークなUSBシリアル番号が返されます。

ISS_VERSIONは、3バイトの返信があります。
1バイト目は、モジュールIDで常に7が返されます。
2バイト目は、ファームウェアのリビジョン番号です。
3バイト目は、現在の動作モードです。電源投入時には、0x40(I2C-S_100kHz)に初期化されます。

 送信:0x5A, 0x01
 受信:0x07, 0x02, 0x40

GET_SER_NUM は、各モジュールに書き込まれているユニークな8バイトのUSBシリアル番号が返されます。

 送信:0x5A, 0x03
 受信:0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31 ("00000001"を表します)
 シリアル番号は、常にASCII 文字の"0" to "9" ( 0x30 to 0x39 ) の範囲の文字です。

ISS_MODEは、動作モードを設定します。動作モードは、I2C、シリアル(UART)、SPI、I/Oがあり、一部は、組み合わせて使用することができます。I2Cは、さらに通信速度(周波数)、クロックがハードウェア生成かソフトウェア生成かを選択できます。
動作モードの一覧は下記のとおりです。
動作モード
IO_MODE 0x00
IO_CHANGE 0x10
I2C_S_20KHZ 0x20
I2C_S_50KHZ 0x30
I2C_S_100KHZ 0x40
I2C_S_400KHZ 0x50
I2C_H_100KHZ 0x60
I2C_H_400KHZ 0x70
I2C_H_1000KHZ 0x80
SPI_MODE 0x90
SERIAL 0x01

IO_CHANGEは、本来の動作モードの切り替えではありません。これは、シリアル、または、I2Cの設定を変更せずにアナログ入力、デジタル入力、デジタル出力のI/Oモードを変更するために使います。
I2Cモードは、I/O1とI/O2の端子を使います。シリアルは、I/O3とI/O4の端子を使います。
よって、I2Cとシリアルを組み合わせ同時に使用することできます。
たとえば、I2C_S_100KHZ(0x40)+シリアル(0x01)で0x41になります。
SPI_MODEでは、4つの端子を全て使いますので、ほかのモードと組み合わせることはできません。

IO_MODE
IO_MODEでは、さらに1バイトのデータ IO_TYPEを設定します。
IO_TYPEは、4組のビットペアで構成されます。
ビットは、上位より、4B, 4A, 3B, 3A, 2B, 2A, 1B, 1A と並んでいて、順にI/O4からI/O1に対応します。
各組の設定内容は下記のとおりです。

xB
xA

0
0
出力 L
0
1
出力 H
1
0
デジタル入力
1
1
アナログ入力

たとえば、0x01(2進数00000001)は、I/O1を出力にしてHを出力し、その他を出力 Lにします。
0xB4(2進数10110100)は、I/O4をデジタル入力、I/O3をアナログ入力、I/O2をデジタル出力 H、I/O1をデジタル出力 L にします。
上記のI/O設定を具体的なコマンドにすると下記のとおりです。
ISS_CMD ISS_MODE IO_MODE IO_TYPE (例)
0x5A 0x02 0x00 0xB4

I/Oモードは、SERIAL(シリアル)モードと組み合わせて使うこともできます。
このとき、I/O1、I/O2は、それぞれRx、Txになりますので、I/Oとして使えるのは、I/O3とI/O4だけです。

下記にI/Oモードとシリアルモードを組み合わせた場合のモード設定コマンドの例を示します。
ISS_CMD ISS_MODE IO_MODE+
SERIAL
ボーレート設定
上位バイト
ボーレート設定
下位バイト
IO_TYPE
0x5A 0x02 0x01 0x00 0x9B 0xB0

すべてのモード設定では、応答バイトとして2バイトのデータが返されます。このページの下のほうの応答バイトを参照してください。

ボーレートの計算
シリアルモードのUARTの通信速度(baud rate)は、下記の式で設定値xを求めます。
x = (48000000/(16×baudrate))-1
たとえば、ボーレートを19200bpsにしたい場合、
(48000000/(16×baudrate))-1=155.25
整数にならない場合は、近似の整数値にしますので、155を設定します。
xは、1から9999まで設定できます。よって、300bpsから3Mbpsまで使用可能です。
この値を上位バイトと下位バイトに分けて、設定します。
標準的なボーレートの一覧を示します。
ボーレート 設定値 上位バイト 下位バイト
300 9999 0x27 0x0F
1200 2499 0x09 0xC3
2400 1249 0x04 0xE1
9600 311 0x01 0x37
19.2k 155 0x00 0x9B
38.4k 77 0x00 0x4D
57.6k 51 0x00 0x33
115.2k 25 0x00 0x19
250k 11 0x00 0x0B
1M 2 0x00 0x02

シリアルモードでは、2ビットのストップビットを送信し、受信の際は、1ビットのストップビットがあればいいので、ストップビットは1、2のどちらでも使用できます。その設定を行う必要はありません。
パリティには対応していませんので、「パリティなし」でしか使えません。

I/O_CHANGE
動作モードの切り替えではありません。シリアルまたはI2Cのモードをそのままにして、アナログ入力、デジタル入力、デジタル出力のI/Oモードを切り替えるために使用します。たとえば、I2Cを使用しているときにデジタル出力を
LからHにしたい場合などに使用します。
使用例
ISS_CMD ISS_MODE IO_MODE IO_TYPE
0x5A 0x02 0x10 0xB4

すべてのモード設定では、応答バイトとして2バイトのデータが返されます。このページの下のほうの応答バイトを参照してください。

I2Cモード
上述のようにI2Cモードには、7個のコマンドがあります。それらは、SCL周波数のみが異なり、そのクロック生成にソフトウェア(Bit bashed)によるものか、PICチップ内のハードウェアを使用するかどうかを設定します。
以下の例は、クロック生成にハードウェアを使用し、100kHzに設定します。
ISS_CMD ISS_MODE I2C_MODE IO_TYPE (上記、I/Oモードを参照)
0x5A 0x02 0x60 0x04

I2Cモードは、シリアルモードと組み合わせて使用することもできます。
シリアルモードと組み合わせるとI/O1端子がRx、I/O2端子がTxになります。
下記にその場合の設定を示します。
ISS_CMD ISS_MODE I2C_MODE+SERIAL ボーレート設定(上位バイト) ボーレート設定(下位バイト)
0x5A 0x02 0x71 0x00 0x9B

ボーレートの計算式は、I/O+シリアルの場合と同じです。
すべてのモード設定では、応答バイトとして2バイトのデータが返されます。このページの下のほうの応答バイトを参照してください。

SPIモード
このモードでは、すべてのI/O端子をSPI通信に使用するため、ほかのモードと組み合わせて使用することはできません。端子配列は、接続図を参照してください。SPIモードでは、クロックとデータ送信のタイミングを4つのパーターンより選択できます。

SPI_MODE Phase
0x90
クロックがアクティブからアイドルになったときにデータを送信、クロックはローレベルがアイドル状態
0x91
クロックがアクティブからアイドルになったときにデータを送信、クロックはハイレベルがアイドル状態
0x92
クロックがアイドルからアクティブになったときにデータを送信、クロックはローレベルがアイドル状態
0x93
クロックがアイドルからアクティブになったときにデータを送信、 クロックはハイレベルがアイドル状態

0x90が標準モードで、SPI SRAM、EEPROMなどで使われています。
SPIモードは、以下のように4バイトで設定します。
ISS_CMD ISS_MODE SPI_MODE SCK除数
0x5A 0x02 0x90 0x01

SCK除数は、SPIのクロック速度(SCK)を設定するための設定値で下記の計算式で求めます。
SCK除数=(6000000/SCK)-1
整数にならない場合は、近似の整数値にします。

SCKを3MHzにするとき、除数=(6000000/3000000)-1=1
SCKを500kHzにするとき、除数=(6000000/500000)-1=11
除数の最大値は255なので、最小速度は23.44kHzです。
除数の最大値は1で、3MHzです。0は、1と同じです。

すべてのモード設定では、応答バイトとして2バイトのデータが返されます。下記の応答バイトを参照してください。

返信バイト
モード設定コマンドに対して、常に2バイトのデータが返信されます。
1バイト目は、ACK(0xFF、正常終了)、または、NAK(0x00、異常終了)を表します。
2バイト目は、ACKの場合は常に0x00になります。
NAKの場合に下記の理由コードが入ります。
0x05 不明なコマンド
0x06、0x07 内部エラー(通常は発生しないはずです)

正しく受理された場合は、
0xff 0x00
が返されます。