セットアップ
インストールすることにより割り当てられた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
が返されます。