⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
6个员额/ 0个新员额
最后发表
johncharris
离线
最后看到:1年8个月前
加入:2018-07-16十七12
I2C不工作。

我试着让da14580连接到HP203b压力传感器。我在树莓派上测试了这个传感器,效果很好。在da14580上,时间似乎太快了。我能看到信号发出,但压力传感器没有反应。这是在正常速度下运行。当我在逻辑分析仪中查看波形时,Pi连接SCL在10秒内低,然后如预期的10秒内高。使用对话芯片,低电平6秒,高电平4.5秒。(我猜实际上是5和5,由于我的采样速度有一些误差)

为什么来自da14580芯片的SCL速率要快两倍。我该怎么做才能解决这个问题?

谢谢你!

约翰

设备:
PM_Dialog
离线
最后看到:2天3小时前
工作人员
加入:2018-02-08 11:03
嗨johncharris,

嗨johncharris,

你能提供给我I2C外围块的初始化代码片段吗?此外,如果您能够分享我的波形从逻辑分析仪,这将是非常有帮助的。

谢谢,PM_Dialog

johncharris
离线
最后看到:1年8个月前
加入:2018-07-16十七12
user_i2c_init (0 x76 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){//将设置保存在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;//初始化I2C与地址提供的参数SetBits16(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); // Slave is disabled SetBits16(I2C_CON_REG, I2C_SPEED, i2c_cfg_env.bit_rate); // Set speed. Standard speed = 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。我有一个截屏的逻辑分析仪与工作实现在树莓派和另一个截屏的非工作波形从da14580。

谢谢你!

约翰

附件:
PM_Dialog
离线
最后看到:2天3小时前
工作人员
加入:2018-02-08 11:03
嗨,约翰,

嗨,约翰,

让我检查一下你的输入,我会尽快给你答复。

谢谢,PM_Dialog

johncharris
离线
最后看到:1年8个月前
加入:2018-07-16十七12
谢谢你,约翰

谢谢你!

约翰

PM_Dialog
离线
最后看到:2天3小时前
工作人员
加入:2018-02-08 11:03
嗨,约翰,

嗨,约翰,

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

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

根据你的初始化代码,使用的是标准模式,所以速度将是100kbit /s,正如你在逻辑分析仪波形中看到的那样。我在我的一边测试它,在标准模式下,SCL在1(高)为4.908 usec,在0(低)为5.092usec,这意味着10usec周期时间。在你的情况下,你需要20usec(高10usec,低10usec)转换为50kbit /s。这是不可能实现的,因为I2C块的最低速度是100kbit /s。

由于没有通用的i2c驱动程序来创建您自己的传感器驱动程序实现,我建议您参考SDK中的i2c示例,该示例位于5.0.4\projects\target_apps\peripheral_examples\i2c\i2c_eeprom路径下。例如,检查i2c_eeprom_init()函数。

谢谢,PM_Dialog