2010年10月22日金曜日
2010年10月11日月曜日
UARTとI2C モジュールの作成
カメラは再度購入することにした。
カメラコントローラのデバッグ時にI2Cコントローラが必要になる。また、その制御は最初のうちはUART経由でPCから行うことになる。そこで、物が入手できるまでこれらコントローラの作成を行うことにした。
- 通信フレーム
PC - FPGA間の通信は以下のような通信フレームで行う。
FPGAはcommand frameに対してACK(受信成功時), NAK(受信失敗時)応答を返す。
// UART I/F
//
// [frame format]
//
// *command frame (PC -> FPGA)
// +---+---+---+---+---+---+---+---+
// |STX|CMD| B3| B2| B1| B0|ETX|SUM|
// +---+---+---+---+---+---+---+---+
//
// command_frame := {STX, CMD, B3, B2,
// B1, B0, ETX, SUM}
// STX := 0x02
// CMD := {cmd_rw, cmd_addr[6:0]}
// B3 := cmd_data[31:24]
// B2 := cmd_data[23:16]
// B1 := cmd_data[15: 8]
// B0 := cmd_data[ 7: 0]
// ETX := 0x03
// SUM := sum[7:0]
// sum = STX + CMD + B3 + B2
// + B1 + B0 + ETX
//
// *response data (FPGA -> PC)
// |STX|TYP| B3| B2| B1| B0|ETX|SUM|
// +---+---+---+---+---+---+---+---+
//
// response_frame := {STX, TYP, B3, B2,
// B1, B0, ETX, SUM}
// STX := 0x02
// TYPE := rd_typ[7:0]
// B3 := rd_data[31:24]
// B2 := rd_data[23:16]
// B1 := rd_data[15: 8]
// B0 := rd_data[ 7: 0]
// ETX := 0x03
// SUM := sum[7:0]
// sum = STX + CMD + B3 + B2
// + B1 + B0 + ETX
//
カメラコントローラのデバッグ時にI2Cコントローラが必要になる。また、その制御は最初のうちはUART経由でPCから行うことになる。そこで、物が入手できるまでこれらコントローラの作成を行うことにした。
- 通信フレーム
PC - FPGA間の通信は以下のような通信フレームで行う。
FPGAはcommand frameに対してACK(受信成功時), NAK(受信失敗時)応答を返す。
// UART I/F
//
// [frame format]
//
// *command frame (PC -> FPGA)
// +---+---+---+---+---+---+---+---+
// |STX|CMD| B3| B2| B1| B0|ETX|SUM|
// +---+---+---+---+---+---+---+---+
//
// command_frame := {STX, CMD, B3, B2,
// B1, B0, ETX, SUM}
// STX := 0x02
// CMD := {cmd_rw, cmd_addr[6:0]}
// B3 := cmd_data[31:24]
// B2 := cmd_data[23:16]
// B1 := cmd_data[15: 8]
// B0 := cmd_data[ 7: 0]
// ETX := 0x03
// SUM := sum[7:0]
// sum = STX + CMD + B3 + B2
// + B1 + B0 + ETX
//
// *response data (FPGA -> PC)
// response := ACK | NAK
// ACK := 0x06
// NAK := 0x15
//
// *readback frame (FPGA -> PC)
// +---+---+---+---+---+---+---+---+
// +---+---+---+---+---+---+---+---+
//
// response_frame := {STX, TYP, B3, B2,
// B1, B0, ETX, SUM}
// STX := 0x02
// TYPE := rd_typ[7:0]
// B3 := rd_data[31:24]
// B2 := rd_data[23:16]
// B1 := rd_data[15: 8]
// B0 := rd_data[ 7: 0]
// ETX := 0x03
// SUM := sum[7:0]
// sum = STX + CMD + B3 + B2
// + B1 + B0 + ETX
//
I2Cコントローラはシングルアクセスのみサポートとしたが、連続アクセスにも容易に変更できる構造にした。
出来上がったUART, I2Cコントローラと以下のプログラムでSpartan3A Starter Kitの電源IC LP3906のレジスタ(LDO1VCR, LDO2VCR)をリードしてみた。
Starter Kitの回路図によればLDO1は3.3V(レジスタ値はデータシートによれば0x17), LDO2は1.8V(同0x08)なので、正しくリードできている。
(今回作成したI2CとUARTモジュールはここで公開している。)
(今回作成したI2CとUARTモジュールはここで公開している。)
登録:
投稿 (Atom)
ERROR: Failed to spawn fakeroot worker to run ...
なにかと忙しくてなかなか趣味の時間を確保できない。 ...orz 家の開発機のOSはLinux Mintなのだが、最近バージョンを22に更新したところ、myCNC用のpetalinuxをビルドできなくなってしまった。ビルドの途中で ERROR: Failed to spawn ...
-
FT232RというUSB-UART変換ICがある。このICにはBit Bang Modeという機能があって、UART用の端子がGPIO的制御が可能になる。 FT232Rを搭載したUSB-UART変換基板は秋月電子やマルツパーツ等色んなところで売られていて私もSparkfunのF...
-
これまではTCM8230MDの出力形式はRGB565にしていたが、画像もちゃんと表示できるようになってきたのでYUV422形式も扱えるようにして両者の画像の違いを見てみた。 まずTCM8230MDの出力をcolor bar出力にして、取り込んだ値に変換式を適用してどんな感じの...
