⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
6个帖子/ 0新
最后一篇
JohnCharris.
离线
最后一次露面:1年7个月前
加入:2018-07-16 17:12
i2c不起作用。

我试图让DA14580连接到HP203B压力传感器。我在覆盆子pi上测试了这个传感器,它可以正常工作。在DA14580上,时间似乎太快了。我可以看到信号被发送,但压力传感器没有响应。这以正常速度运行。当我在逻辑分析仪中查看波形时,PI连接SCL低10美元,然后按预期为10倍。使用对话框芯片,6倍,4.5秒秒为4.5秒。(我猜测这是直到的5和5,来自我的采样速度的一些错误)

为什么SCL速率从DA14580芯片中快速速度。我该怎么办才能解决这个问题?

谢谢

约翰

设备:
PM_DIALOG.
离线
最后一次露面:14小时56分钟前
职员
加入:2018-02-08 11:03
嗨JohnCrais,

嗨JohnCrais,

您能否向我提供I2C外设块的初始化COD片段?此外,如果您能够与逻辑分析仪分享我的波形,那将是非常有帮助的。

谢谢,PM_DIALOG.

JohnCharris.
离线
最后一次露面:1年7个月前
加入:2018-07-16 17:12
user_i2c_init(0x76,i2c_7bit
user_i2c_init(0x76,i2c_7bit_addr,i2c_standard,i2c_1byte_register,i2c_2bytes_addr);
void user_i2c_init(uint16_t slave_address,i2c_address_modes i2c_address_width,i2c_speed_modes bit_rate,i2c_register_width register_width,i2c_address_bytes_count register_address_width){//保存在struct i2c_cfg_env.i2c_address_width = i2c_address_width中的设置;i2c_cfg_env.bit_rate = bit_rate;i2c_cfg_env.register_width = register_width;i2c_cfg_env.register_address_width = register_address_width;//使用作为参数setbits16提供的地址初始化i2c(clk_per_reg,i2c_enable,1);//为i2c setword16启用时钟(i2c_enable_reg,0x0);//禁用I2C控制器setword16(i2c_con_reg,i2c_master_mode | i2c_slave_disable | i2c_restart_en);//禁用从站setbits16(i2c_con_reg,i2c_speed,i2c_cfg_env.bit_rate);//设置速度。标准速度= 1,fast = 2 if(i2c_cfg_env.i2c_address_width == i2c_7bit_addr){setbits16(i2c_con_reg,i2c_10bitaddr_master,0); // Set addressing mode. 7bit = 0 } else { SetBits16(I2C_CON_REG, I2C_10BITADDR_MASTER, 1); // Set addressing mode. 10bit= 1 } SetWord16(I2C_TAR_REG, slave_address & 0x3FF); // Set Slave device address SetWord16(I2C_ENABLE_REG, 0x1); // Enable the I2C controller while (GetWord16(I2C_STATUS_REG) & 0x20) ; // Wait for I2C master FSM to be IDLE }

这是代码。我有完整的i2c c文件,我正在附加的zip中使用。我有一个逻辑分析仪的屏幕截图,在Raspberry Pi上具有工作实现以及来自DA14580的非工作波形的另一个屏幕截图。

谢谢,

约翰

附件:
PM_DIALOG.
离线
最后一次露面:14小时56分钟前
职员
加入:2018-02-08 11:03
嗨,约翰,

嗨,约翰,

让我检查你的意见,我会尽快回复你。

谢谢,PM_DIALOG.

JohnCharris.
离线
最后一次露面:1年7个月前
加入:2018-07-16 17:12
谢谢,约翰

谢谢,

约翰

PM_DIALOG.
离线
最后一次露面:14小时56分钟前
职员
加入:2018-02-08 11:03
嗨,约翰,

嗨,约翰,

I2C块可以以两种模式操作:在正常或快速模式下。控制器操作的I2C_CON_REG寄存器控件的I2C_SPEED位域。

  • 1 =标准模式(100 kbit / s)
  • 2 =快速模式(400 kbit / s)

根据您的初始化代码,使用的标准模式,因此速度将在100 kbit / s,如您所见于逻辑分析仪波形。我在我的身边测试它,在标准模式下,SCL处于1(高),为4.908 USEC,0(低)为5.092USEC,这意味着10USEC周期时间。在您的情况下,您需要20USEC(10USEC高,低于低电平),转换为50 kbit / s。由于I2C块的最小速度为100 kbit / s,这是不可能实现的。

由于没有通用I2C驱动程序来创建您自己的传感器驱动程序实现,因此我建议您具有参考位于5.0.4 \ projects \ target_apps \ peripheral_example \ i2c \ i2c_eeprom路径下的sdk的I2C示例。例如,检查I2C_EEPROM_INIT()函数。

谢谢,PM_DIALOG.