UART-I2Cブリッジ

UART-I2Cブリッジの概要

関連するファイルはzipでまとめられています→UART-I2C.zip
 
レスコンボードからのUART通信を受けてI2Cバスを操作するブリッジです。
パソコンとシリアルケーブル(ストレート)で接続することで、レスコンボードを介さずに動作させることも可能です。

各部の説明



回路

回路図はBSch3Vで製図しました。ファイルはUART-I2C.ce3です。


部品

コネクタ類は共立エレショップで、そのほかの部品は秋月電子通商で購入できます。
 記号 分類
定格・型
パッケージ
 R1,R2  抵抗  1kΩ 
 1608
 R3~R9  抵抗  470Ω  1608
 C1~C5  積層セラミックコンデンサ  0.1μF  ラジアル
 CPU  AVRマイコン  ATmega88P  28ピンDIP
   RS232ドライバ  ADM232A  
   発光ダイオード    3mmφLED
   EH-Aベース付ポスト  トップ型04P  
   ピンヘッダ    
   Dサブコネクタ メス
 サイド型09P  

制作方法

ファームウェア

ファームウェアはAVR Studio 4+WinAVRの環境で製作しました。
UART-I2C.hexをATmega88に書き込んでください。
プログラムは内臓クロックによる8MHz動作を想定しているので、ATmega88のヒューズのCLKDIV8ビットをアンプログラムド(1)にしてください。

基板の製作

基板のパターンはMinimal Board Editorで製作しました。
感光基板で製作する場合、印刷に必要なレイヤーは、PTHSOLDRLの3つです。
 
基板の大きさは50mm×75mmで、複数枚並べると、サンハヤトの感光基板にちょうど収まるようになっています。

操作方法

UARTから以下のコードを送ることでI2Cバスに対して対応する行動をとります。

送信

送信(マルチ)

複数のコマンドを連ねて送信する方式です。通常はこちらを使用します。

意味
1バイト目(ヘッダ) 0xFF 通信開始
2バイト目(フラグ) 0x00 マルチ
3バイト目(シーケンスNo.) 0x?? 返信に同じシーケンスNo.を使用
4バイト目(コマンド長) N コマンドの長さを指定
5~(4+N)バイト目まで(コマンド)
命令を書く
 

送信(シングル)

マルチのコマンド実行中に割り込んで命令を実行します。ブリッジが停止してしまった場合などに使用します。


意味
1バイト目(ヘッダ) 0xFF 通信開始
2バイト目(フラグ) 0x01 シングル
3バイト目(シーケンスNo.) 0x?? 返信に同じシーケンスNo.を使用
4バイト目(コマンド)
命令を書く

返信

命令を送られ、実行した際にブリッジが返す信号です。

意味
1バイト目(ヘッダ) 0xFF 通信開始
2バイト目(ステータス)
マルチ:ステータスコード
シングル:ステータスコード+1
3バイト目(シーケンスNo.) 0x?? 送信と同じシーケンスNo.を使用
4バイト目(コード長) M コードの長さを宣言
5~(4+M)バイト目まで(返信コード)
返信が必要な命令に対しての返信

コマンド

コマンドとして使用できる信号です。送信のみ2バイトで1コマンドとなります。
1バイト目 2バイト目 意味 返信 シングルorマルチ
0x80 無し スタートビット 返信なし マルチ
0x81 無し ストップビット 返信なし 共用
0x82 送信データ 送信 返信なし マルチ
0x83 無し 受信+NACK 受信データ マルチ
0x87 無し 受信+ACK 受信データ マルチ
0x88 無し ステータスコード返信要求 ステータスコード マルチ
0x8F 無し ビジー調査 0x00(アイドリング状態) 0x01(ビジー状態) シングル

ステータスコード一覧

    スタートビットを送信したとき
        0x08    スタート・コンディションが送られた
        0x10    リピーテッド・スタート・コンディションが送られた
    ストップビットを送信したとき
        0xF8    I2Cは停止している
    SLA+Wを送ったとき
        0x18    ACKを受け取った
        0x20    NOT ACKを受け取った(スレーブが存在しないかもしれない)
    SLA+Rを送ったとき
        0x40    ACKを受け取った
        0x48    NOT ACKを受け取った(スレーブが存在しないかもしれない)
    データ・バイトを送ったとき
        0x28    ACKを受け取った(次のデータを要求している)
        0x30    NOT ACKを受けとった(最後のデータを送信した)
    受信+NACKのとき
        0x58    NOT ACKを返した(最後のデータを受信した)
    受信+ACKのとき
        0x50    ACKを返した(次のデータがあるので受信する準備を)
    その他
        0x52    ブリッジ起動(リセットがかかった)
        0x54    エラー(タイムアウト、動作仕様外等)
上記以外のものが出た場合、I2Cでエラーが発生した可能性が高い。
詳しくはAVRマイコン・リファレンス・ブック 204pを参照
 
エラーが発生した場合、直前までに用意された返信に加え何バイト目の命令でエラーが発生したかというコードを返信する。

その他

デバッグ用ツール(新仕様用):ToriTerm2.zip
デバッグ用ツール:ToriTerm.zip
プログラム(旧仕様):UARTtoI2C3.zip
 

更新履歴

2010/05/20    通信速度を38400に設定
2010/07/01    電源基板の実装に際し、エラー発生時にリセットをかける動作を停止。そのほかもろもろ
SelectionFile type iconFile nameDescriptionSizeRevisionTimeUser
ċ

表示 ダウンロード
Baudrateを設定できる  403KB v. 9 2010/05/12 9:55 Robo Kirarin
ċ

表示 ダウンロード
Baudrateを設定できる  383KB v. 7 2010/05/12 9:54 Robo Kirarin
ċ

表示 ダウンロード
  118KB v. 9 2010/07/02 1:28 Robo Kirarin
ċ

表示 ダウンロード
  14KB v. 10 2009/04/24 3:40 Robo Kirarin
ċ

表示 ダウンロード
  26KB v. 12 2009/06/01 1:39 Robo Kirarin
ċ

表示 ダウンロード
  26KB v. 10 2009/06/26 23:36 Robo Kirarin
ċ

表示 ダウンロード
  4KB v. 9 2009/05/29 1:07 Robo Kirarin
Comments