I2C の確認

AXI の I2C で I2C のプロトコルの確認をした。I2C は MSB からビットを送るので注意が必要という事がわかった。
毎度のことだが FPGA の部屋の記事が役に立つ。
FPGAの部屋 Vivado 2013.4でAXI IIC v2.0 を使用した時のIOBUF

f:id:ryos36:20180216133044p:plain

まずはデザイン 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;
}

実行結果
f:id:ryos36:20180216133529p:plain

追伸

情報としては
I2Cについて
ここが正確なようだ。

当初、picfun com というサイトをみていたのだが、
LSB から送信しているように見える図。NACK に関しての記述がない。などから不正確なことが分かった。