i2c的调试

本文深入探讨了I2C通信协议在写操作和读操作中的数据流向。通过示波器分析波形,揭示了开始信号、器件地址、读写标志、数据传输及确认信号的详细过程。在写操作中,从设备仅发送ACK;而在读操作中,从设备不仅发送ACK,还会紧接着提供数据。通过对波形图的解读,还计算出了传输频率为100kbps。
摘要由CSDN通过智能技术生成
<pre name="code" class="html">int main (void)
{	

	
	i2c_module_write_test(0x51,0x00,0x00);
	i2c_module_write_test(0x51,0x00,0x02);//如图1所示
</pre>}// i2c 测试函数<pre>
void i2c_module_write_test(uint16_t dev_address, uint8_t address, uint8_t data)
{

    SetWord16(I2C_ENABLE_REG, 0x0);                                               // Disable the I2C controller	
    SetWord16(I2C_CON_REG, I2C_MASTER_MODE | I2C_SLAVE_DISABLE | I2C_RESTART_EN); // Slave is disabled
    SetBits16(I2C_CON_REG, I2C_SPEED, 2);                                     // Set speed
    SetBits16(I2C_CON_REG, I2C_10BITADDR_MASTER, 0);                   // Set addressing mode
    SetWord16(I2C_TAR_REG, dev_address & 0x3FF);                                  // Set Slave device address
    SetWord16(I2C_ENABLE_REG, 0x1);                                               // Enable the I2C controller
    while( (GetWord16(I2C_STATUS_REG) & 0x20) != 0 );                             // Wait for I2C master FSM to be IDLE
	
	// write the dev address (w)
	// write the mem address (w)
<span style="white-space:pre">	</span>SEND_I2C_COMMAND(address & 0xFF); 
  WAIT_WHILE_I2C_FIFO_IS_FULL();          // Wait if I2c Tx FIFO is full
	
	SEND_I2C_COMMAND(data & 0xFF);               // Send write data
  WAIT_UNTIL_NO_MASTER_ACTIVITY();                // wait until no master activity

}
 

图1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值