通过看门狗重新启动系统,I2C有时不起作用。

6个帖子/ 0新
最后一篇
Lizhuobin.
离线
最后一次露面:1个月3周前
加入:2014-08-15 05:08
通过看门狗重新启动系统,I2C有时不起作用。

我做一个这样的实验。

使用看门狗重新启动系统,

然后I2C有时不起作用,

例子

void i2c_write_byte(uint8_t wr_data)
{
等待_while_i2c_fifo_is_full();//等待i2c tx fifo已满
send_i2c_command(wr_data&0xff);//发送写入数据
wait_until_i2c_fifo_is_empty();//等到TX FIFO是空的

wait_until_no_master_actity();//等到没有主活动
}

我想发送一个字节,但它在等待_until_i2c_fifo_is_empty()等待,

FIFO不能为空,我检查i2c_status_reg值,值仍为0x2,

如果我强行和芯片,它会很好地运行。

如何解决这个问题。

wt_dialog(未经验证)
嗨Lizhuobin,

嗨Lizhuobin,

对不起,我可能错过了这一点,你说手表狗不起作用吗?

布尔

wt_dialog.

Lizhuobin.
离线
最后一次露面:1个月3周前
加入:2014-08-15 05:08
嗨wt_dialog,

嗨wt_dialog,

看狗工作,
但有时,在手表狗重新启动后,I2C不起作用。

此致,

muxf.
离线
最后一次露面:3年2周前
加入:2016-07-25 09:15
嗨wt_dialog,

嗨wt_dialog,

我还在SDK 5.0.4中有类似的问题:
我通过I2C将DA14580接口到温度传感器。基于该示例
filipheral_examples \ i2c \ i2c_eeprom
我可以从/向传感器读取/写温度。但如果我将它移植到榜样中
ble_examples \ ble_app_perifal.
然后它陷入了等待_until_i2c_fifo_is_empty(),然后进入nmi_handlerc(),指示看门狗被激活。

我在文件custs1_task.c中执行I2C初始化
custs1_create_db_req_handler()
{
......
if(status == att_err_no_error)
{
i2c_eeprom_init(i2c_slave_address,i2c_speed_mode,i2c_address_mode,i2c_address_size);
}
......
}

我在App_on_system_powered的回调函数中执行I2C R / W:
i2c_error_code code = i2c_eeprom_write_byte(32,2);
......

为什么它在I2C EEPROM中工作很好,但不在外围示例中?在I2C EEPROM示例中,我只是将初始化呼叫放在其中(1)循环中
如果您可以尽快帮助我,这将是很好的,因为下周我应该向客户展示我的外围应用程序。谢谢

muxf.

mt_dialog.
离线
最后一次露面:1个月15小时前
职员
加入:2015-06-08 11:34
嗨muxf,

嗨muxf,

我建议在创建数据库时进行I2C模块的初始化,但是每当您想要与数据或User_App_Init接口时,虽然这无影响您遇到的行为。你陷入了#define的事实意味着您的FIFO具有数据,程序等待,直到发送数据根本不发送数据(I2C设备也不准备某种原因,并且不会ack数据发送到580)或看门狗在FIFO中的所有数据都发送之前命中。您可以尝试通过拒绝da1458x_config_basic.h中的cfg_wdog来禁用看门狗,或者尝试通过将lookdog_default_period更改为更大的值来增加看门狗的时间段。如果您的代码困扰着,而永远意味着与温度设备通信有问题。或许在外围示例中,代码探测器在发送实际数据之前重复温度传感器,但由于没有看门狗实现,类似于外围示例的东西不会影响外围示例。

谢谢mt_dialog.

muxf.
离线
最后一次露面:3年2周前
加入:2016-07-25 09:15
嗨mt_dialog,

嗨mt_dialog,

非常感谢您的支持。它现在有效。

我试图禁用WDOG,但结果相同。你是对的,它必须是错误的沟通。然后,我将BLE_PERITERAL与EEPROM示例行按行进行比较,并在BLE_PERITIELAL示例中找出,I2C没有端口和引脚预留和定义!对不起,我是对话框的新人,所以我不熟悉对话软件架构。我想在外围示例中考虑所有外围设备都应该已经定义。

然后,我为I2C添加此类预留和定义,但不会对结果进行任何更改。应用程序始终进入NMI_Handlerc()。而且我也有有时它适用于相当短的时间间隔。为此,我决定再次检查我的硬件。然后,我将我的传感器重新定位到对话框14580,并尽可能短地制作SCL和SDA电缆。最后它也有效地在BLE_PERITIELAL示例中,我获得了从传感器传送的稳定传感器数据!

我的经验是,对于等待_whille_i2c_fifo_is_full()的困难,应该首先检查
1.端口预订和定义
2.传感器和DA14580之间的硬件连接

再次感谢。

muxf.