4个帖子/ 0新
最后一篇
镀龙
离线
最后一次露面:4年7个月前
加入:2015-09-14 18:36
I2C数据传输大小

有没有办法通过I2C发送/接收32个字节的数据?

设备:
mt_dialog.
离线
最后一次露面:1个月3周前
员工
加入:2015-06-08 11:34
敬佩龙,

敬佩龙,

当前的驱动程序实现使用32字节传输和接收FIFO。由于驱动程序检查TFNF标志是否使其在FIFO中保持送入数据,因此您可以将数据突发与当前实现一起发送。关于接收侧驱动程序具有此限制的自由32个是FIFO大小,您必须实现不同的读取过程才能采用超过32字节,我想您可以轮询接收FIFO的状态(完整,而不是完整的)通过i2c_status_reg的rff和rfne标志,如果从奴隶的接收FIFO时钟数据中有空间或等待FIFO的空间。

谢谢mt_dialog.

镀龙
离线
最后一次露面:4年7个月前
加入:2015-09-14 18:36
我做了以下几句,但做了

我做了以下事情,但似乎没有工作。如果您看到任何问题,请建议。谢谢。

最初请求在开始时读取32个字节
for(j = 0; j <32; j ++)
send_i2c_command(0x0100);

然后基于RxFifo级别设置为小于32字节的中断;例如16字节。
一旦中断,在rxfifo生成,检查和读取可用数据,请求更多数据
input_level = getword16(i2c_rxflr_reg);
for(i = 0; i input_buffer [i ++] =(0xff&getword16(i2c_data_cmd_reg));
for(j = 0; j send_i2c_command(0x0100);

mt_dialog.
离线
最后一次露面:1个月3周前
员工
加入:2015-06-08 11:34
敬佩龙,

敬佩龙,

基于I2C_EEPROM外围示例,我完成了一些修改,请试试似乎在我身边工作。

1.启用NVIC以获取I2C R_RX_FULL中断。

2.将I2C_RX_TL_REG设置为所需的值。

3.取消设置M_TX_empty,因为默认情况下启用(当FIFO为空时命中)

4.创建函数I2C_EEPROM_READ_DATA_CUST():

UINT32_T I2C_EEPROM_READ_DATA_CUST(UINT8_T * RD_DATA_PTR,UINT32_T地址,UINT32_T大小)
{
uint32_t bytes_read = 0x100;//离开了举例

i2c_wait_until_eeprom_ready();
i2c_send_address(地址);
read_data_cust(&rd_data_ptr,地址,0x100);

返回bytes_read;//离开了举例
}

5. read_data_cust():

静态void read_data_cust(uint8_t ** p,uint32_t地址,uint32_t大小)
{
in j;
for(j = 0; j {
等待_while_i2c_fifo_is_full();//等待TX FIFO已满
send_i2c_command(0x0100);//设置 times的读取访问
}
}

6.当FIFO阈值超过中断时,将发生并将由以下ISR服务:

void read_i2c_int_custom(void)
{
而(getword16(i2c_rxflr_reg))
{
* test_p =(0xff&getword16(i2c_data_cmd_reg));//获取收到的字节
test_p ++;
}
}

希望能帮助到你,

谢谢mt_dialog.

主题锁定