AXI の I2C で I2C のプロトコルの確認をした。I2C は MSB からビットを送るので注意が必要という事がわかった。
毎度のことだが FPGA の部屋の記事が役に立つ。
FPGAの部屋 Vivado 2013.4でAXI IIC v2.0 を使用した時のIOBUF
まずはデザイン ILA のデバッグマークを付けている。
ソフトが必要なのでプログラムを書く。
int main() { int rv; uint8_t recv_data[2]; uint8_t send_data[2]; init_platform(); print("Hello World\n\r"); iic_config0 = XIic_LookupConfig(XPAR_AXI_IIC_0_DEVICE_ID); rv = XIic_CfgInitialize(&iic0, iic_config0, iic_config0->BaseAddress); XIic_Reset(&iic0); XIic_DynamicInitialize(&iic0); send_data[0] = 4; rv = XIic_DynRecv(iic_config0->BaseAddress, ZC706_I2C_MUX_ADDR, recv_data, 1); printf("%d\n", rv); rv = XIic_DynSend(iic_config0->BaseAddress, ZC706_I2C_MUX_ADDR, send_data, 1, XIIC_STOP); printf("%d\n", rv); rv = XIic_DynRecv(iic_config0->BaseAddress, ZC706_I2C_MUX_ADDR, recv_data, 1); printf("xrecv_data = %d\n", recv_data[0]); cleanup_platform(); return 0; }
実行結果
追伸
情報としては
I2Cについて
ここが正確なようだ。
当初、picfun com というサイトをみていたのだが、
LSB から送信しているように見える図。NACK に関しての記述がない。などから不正確なことが分かった。