I2C奇怪的错误

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
10个职位/ 0新
最后一篇
Thanhtu131
离线
最后见到:7个月2周前
加入:2018年9月18日17:44
I2C奇怪的错误

嗨,我面临着I2C器件非常奇怪的错误。我使用的EEPROM AT24C02和实时计数器DS3231。由于它们具有相同的I2C配置(ADRESS模式,字ADDRES大小),我没有下发展库DS3231。我试图读取AT24C02和DS3231 7个字节。在I2C EEPROM示例(非BLE)我可以成功地读取。但在ble_sleepmode例如,在回调函数user_app_init(),我把一些代码行以读取从AT24C02和DS3231 7个字节。>调试 - - >运行,在IDE跳转到文件nmi_handler.c和被困在线路63我有一些捕捉我可以从AT24C02(地址为0x50)。当我的地址更改为DS3231地址(0x68)中读7个字节在PDF文件中。

62如果((GetWord16(SYS_STAT_REG)DBG_IS_UP)== DBG_IS_UP)
63 __asm( “BKPT#0 \ n”);
其他64
{

我已经花了2天,但我无法找出原因。请帮帮我!

我期待着很快收到你的来信。

谢谢!

附件:
设备:
PM_DIALOG.
离线
最后见到:9小时18分钟前
工作人员
加入:2018-02-08 11:03
嗨Thanhtu131,

嗨Thanhtu131,

我建议首先检查教程8:调试方法为了开始调试应用程序代码。能否请你找什么码点触发NMI?

所以,如果我理解正确的,它是在非BLE项目的工作,但它不会做的BLE项目。

您是否使用任何可用的睡眠模式?

谢谢,PM_DIALOG.

Thanhtu131
离线
最后见到:7个月2周前
加入:2018年9月18日17:44
嗨,你明白错

嗨,你已经明白错了。我可以在两个BLE和非BLE例如正常读取EEPROM中。但我只能从非BLE例如DS3231读取时间。在BLE睡眠模式例如,如果我改变从为0x50(EEPROM),以0x68(DS3231)中的地址,一些触发的NMI。默认的睡眠模式是DEEPSLEEP模式。事情变得更加神秘:我做了adpter板与连接到DA14580基本套件中的RST引脚RST按钮,如果我按那个RST按钮,我可以运行的代码,并读取DS3231的数据,我所要做的,每次我调试程序。

PM_DIALOG.
离线
最后见到:9小时18分钟前
工作人员
加入:2018-02-08 11:03
嗨Thanhtu131,

嗨Thanhtu131,

>>>如果我的地址从为0x50(EEPROM)更改为0x68(DS3231),东西触发NMI。

你将不得不开始调试项目。这就是为什么我以前的答案是跟随建议的教程。

请在调试模式下运行它,添加断点到读取功能,并进入代码,这样你可以找到越来越错误。

谢谢,PM_DIALOG.

Thanhtu131
离线
最后见到:7个月2周前
加入:2018年9月18日17:44
嗨,我已经跟着

嗨,我按照建议的教程。而发生在这DA14580的i2c_eepeom库驱动程序就行了hardfault。除此之外,当hardfault发生,而不是事情已经日志。如果该行代码,我发现触发器NMI,一定有东西在日志中sereial监视器。我不精把破发点的地方。请检查武官PDF文件。

附件:
PM_DIALOG.
离线
最后见到:9小时18分钟前
工作人员
加入:2018-02-08 11:03
嗨Thanhtu131,

嗨Thanhtu131,

你能请注明这是SDK函数,触发器NMI?

谢谢,PM_DIALOG.

Thanhtu131
离线
最后见到:7个月2周前
加入:2018年9月18日17:44
正如你可以在I2C错误见

正如你可以在I2C错误pdf文件看,这会触发NMI的SDK函数是WAIT_UNTIL_NO_MASTER_ACTIVEITY()(这是检查是否有涉及寄存器宏)。我不知道为什么如果我按下复位按钮(I制成,其具有连接到在DA14580试剂盒中的RST销头的按钮的适配器板)中,i可以运行和调试程序

PM_DIALOG.
离线
最后见到:9小时18分钟前
工作人员
加入:2018-02-08 11:03
嗨Thanhtu131,

嗨Thanhtu131,

在两个I2C api中调用WAIT_UNTIL_NO_MASTER_ACTIVITY(),并让应用程序等待,直到主程序不再有活动。

从附加的文件中,我假设导致NMI的WAIT_UNTIL_NO_MASTER_ACTIVITY()是由i2c_wait_until_eeprom_ready()调用的。

该i2c_wait_until_eeprom_ready()函数是轮询直到I2C就绪。首先,该函数将一个虚拟的值,它是等待,直到Tx的FIFO是空的。我强烈建议你探测的引脚(SCL,SDA和RDY),并尝试读取的地址。如果您尝试,我认为,这将是更加清晰的问题可能是什么。

你可以忽略,因为这可以使你发出的是i2c_wait_until_eeprom_ready(),因为这是为了检查,如果您的设备已准备好进行交互发送一个额外的字节到I2C器件,但比i2c_eeprom_read_byte()函数,你等让你什么I2C器件的数据表描述了总线上。

谢谢,PM_DIALOG.

Thanhtu131
离线
最后见到:7个月2周前
加入:2018年9月18日17:44
你好,非常感谢你

您好,非常感谢您的支持,我已经查明问题来自DS3231 PCB。更换另一个ds3231模块后,操作正常。

PM_DIALOG.
离线
最后见到:9小时18分钟前
工作人员
加入:2018-02-08 11:03
嗨Thanhtu131,

嗨Thanhtu131,

很高兴你理解了它!

谢谢,PM_DIALOG.