FMC 上の I2C

FMC 上の I2C にアクセスできるようになった。FMC にはいま PCA9555 等がつながっている。MT9V024 も RJ45 で繋がっているはずだ。まずは PCA9555 にアクセス。

XIic_Send は I2C のデータシート上のアドレスに1ビット右にシフトした値を送信先アドレスとして使う。Send と Recv が分かれているためだろうが、紛らわしい。FMC の PCA9555 のアドレス線はすべてグランドに繋がっているのでアドレスは (0x40 >> 1) となる。さらに、PCA9555 の 0 番地のレジスタは input 情報(う〜ん。アドレスがいろいろあってややこしい)。これを見る。

        len = XIic_Send(XPAR_XPS_IIC_1_BASEADDR, PCA9555BS_I2C_ADDR, &pca9555_addr, 1, 0);
        ASSERT(len == 1);
        len = XIic_Recv(XPAR_XPS_IIC_1_BASEADDR, PCA9555BS_I2C_ADDR, receive_buff, 1, 0);
        ASSERT(len == 1);

11001010 と読めた。

その後、PCA9555 の 7 レジスタに 0x7F を書き、(これで IO 17 がアウトプットになる)さらに 3 レジスタに 0 を書き込むとステータス LED が点灯。0x80 を書けば消灯。まずまず順調。

その後、PCA9546 (I2C の Mux)その先の EEPROM まで読めた。どうも DVI の入力は I2C を使っているらしい。EEPROM が外から読めるようになっている。さらに、中から書くことが出来る。DVI の外から I2C の経路を通って中に侵略できないようになってもいる。