接口處理
top接口
output system_i2c_0_io_sda_writeEnable,
output system_i2c_0_io_sda_write,
input system_i2c_0_io_sda_read,
output system_i2c_0_io_scl_writeEnable,
output system_i2c_0_io_scl_write,
input system_i2c_0_io_scl_read,
soc接口處理
.system_i2c_0_io_sda_write(system_i2c_0_io_sda_write),
.system_i2c_0_io_sda_read(system_i2c_0_io_sda_read),
.system_i2c_0_io_scl_write(system_i2c_0_io_scl_write),
.system_i2c_0_io_scl_read(system_i2c_0_io_scl_read),
WriteEnable信號的處理
I2C的SDA和SCL對應(yīng)FPGA雙向IO,需設(shè)置為弱上拉。
I2C對應(yīng)的三態(tài)門的OE信號:需要賦值為I2C SDA/SCL的write信號;rtl中的表述如下:
主要原因在于:i2c的通信過程中,當(dāng)總線空閑時,兩根線均為高電平。連到總線上的任一器件輸出的低電平,都將使總線的信號變低,即各器件的SDA及SCL都是線"與"關(guān)系。
2)引腳在輸出信號的同時還將引腳上的電平進(jìn)行檢測,檢測是否與剛才輸出一致,為"時鐘同步"和"總線仲裁"提供了硬件基礎(chǔ)。
assign system_i2c_0_io_sda_writeEnable = !system_i2c_0_io_sda_write;
assign system_i2c_0_io_scl_writeEnable = !system_i2c_0_io_scl_write;
Interface配置示例
I2C寄存器設(shè)置
在I2C的設(shè)置中第一步是要配置寄存器。寄存器的說明在ds文檔中。
tsuData中,1代表10ns;
Timeout中,1表示10ns
tLow和tHigh的1代表10ns
10.1.3 軟件部分(Risc V)
l I2C通信主要包括以下幾個部分:
1、主設(shè)備發(fā)送起始位(Start)
2、主/從發(fā)送數(shù)據(jù)(TxData)(注:軟件處理時,主發(fā)送從設(shè)備的地址和讀/寫位,與發(fā)送數(shù)據(jù)處理方式相同)
3、主/從接收數(shù)據(jù)(RxData)
4、主/從發(fā)送應(yīng)答信號(ACK)
5、主設(shè)備發(fā)送停止位(Stop)
l 對應(yīng)的C函數(shù):
1、主設(shè)備發(fā)送起始位(Start)
i2c_masterStartBlocking(I2C_CTRL);//master send start signal
2、主/從發(fā)送數(shù)據(jù)(TxData)
i2c_txByte(I2C_CTRL, 0xC0);//master/slave send data
3、主/從接收數(shù)據(jù)(RxData)
i2c_rxData(I2C_CTRL)//master/slave receive data
4、主/從發(fā)送應(yīng)答信號(ACK)
i2c_txAckBlocking(I2C_CTRL);//master/slave send ACK
i2c_txNackBlocking(I2C_CTRL);//master/slave send NaCK
#(不需要發(fā)送ACK,但是需要等待一個應(yīng)答周期的時候,用Nack函數(shù))
5、主設(shè)備發(fā)送停止位(Stop)
i2c_masterStopBlocking(I2C_CTRL);//master send stop
l 小結(jié):
RISC V中提供的關(guān)于I2C的函數(shù),相當(dāng)于把I2C通信過程中各個狀態(tài)進(jìn)行了分解的,上述提到的各個函數(shù)功能,除了必須通過I2C主設(shè)備實(shí)現(xiàn)的功能:發(fā)送start和stop之外,函數(shù)本身并沒有主從之分;
當(dāng)需要RISC V中的I2C做從設(shè)備時,只需監(jiān)控總線狀態(tài)(如是否接收到有效的數(shù)據(jù)等),同時調(diào)用對應(yīng)的函數(shù),給主設(shè)備發(fā)送應(yīng)答信號,根據(jù)主設(shè)備提供的指令,接收/發(fā)送相應(yīng)的數(shù)據(jù)即可;
硬件驗(yàn)證平臺
原文標(biāo)題:RISC V的I2C操作
文章出處:【微信公眾號:易靈思FPGA技術(shù)交流】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
FPGA
+關(guān)注
關(guān)注
1646文章
22054瀏覽量
618822
發(fā)布評論請先 登錄
I2C總線通信原理 如何設(shè)計I2C總線電路
I2C總線與Arduino的接口示例
I2C總線的工作模式介紹
I2C總線故障排除技巧
I2C總線設(shè)備地址設(shè)置方法
I2C總線應(yīng)用實(shí)例分析
I2C總線上拉電阻阻值如何確定?

I2C協(xié)議的基礎(chǔ)知識

評論