嗨,对话框中,
我的任务之一是通过I2C向外部芯片发送/接收大量数据。我经常遇到DA14681发送错误的I2C信号(重新启动启动条件),并在几秒钟内失去BLE连接的问题。我发现只要增加连接间隔,这个问题发生的频率就会降低。此外,在我添加了许多从延迟后,结果会更好。我猜在I2C传输过程中可能会发生每个间隔的BLE TX/RX事件。请看附件中的PDF文件,以便理解我的意思。这个问题可能出现吗?如果是,如何防止BLE TX/RX事件与I2C传输同时发生?是否可以提前知道BLE TX/RX事件何时发生,然后在接下来的步骤中进行I2C传输?
谢谢你的帮助。
设备:

嗨nigelyang,
让我查一下,然后告诉你。
谢谢,PM_Dialog
嗨,对话框中,
对我的问题有什么解决办法吗?谢谢你的帮助
嗨nigelyang,
我为耽搁道歉。因此,如果我正确理解了您的描述,只要I2C事务与BLE事件同时发生,问题就存在。这是正确的吗?
应用程序是否通过对端设备的通知发送I2C值?当这个问题发生时,设备是重新启动还是仅仅断开连接?你是在调试模式下运行的吗?另外,你有使用任何一种睡眠模式吗?
我假设一个比I2C具有更高优先级的事件可能是在ISR中服务的。BLE中断优先级(PRIORITY_1)高于I2C中断优先级(PRIORITY_2)。
谢谢,PM_Dialog
嗨,对话框中,
是的,我的问题是BLE事件(ack)和I2C传输(特别是读取)同时发生。
它似乎重新启动或I2C返回0x8001失败(我使用I2C适配器,例如ad_i2c_read();)。我观察到I2C信号传输分为两部分(似乎重新启动启动条件,因为DA14681不能在一个字节结束时给出一个ACK)
通过调试模式和生产模式,我得到了相同的结果。结果应该有所不同吗?当问题发生时,我使用“pm_mode_idle”。你提到BLE中断的优先级(PRIORITY_1)高于I2C (PRIORITY_2)。我认为是这样的,BLE事件(响应ACK)导致不正常的I2C传输,并让DA14681进入未知状态(稍后重新启动)或始终等待外部数据。
我想知道在每个连接间隔中哪个任务或函数负责发送BLE ACK,并允许我在接下来的步骤中做I2C传输。
嗨nigelyang,
调试模式下的行为是什么?代码卡住了吗?例如,你得到任何断言或任何其他东西。这只发生在DA1468x与对等设备连接时?
谢谢,PM_Dialog
嗨,对话框中,
一般情况下,塔克采用I2C传输。我不使用断言。我将手机App的TX/RX数据发送到DA14681,并对数据进行处理,然后通过I2C与外部芯片进行TX/RX数据传输。
我希望我能准确地知道BLE事件(acknowledge)何时发生,允许我在两个连接事件之间进行I2C传输。是否有可能知道BLE连接事件的中断?如果有,如何知道?
还有一个问题,如果DA14681发起更改连接速率参数的请求,需要多长时间才能完成并适应新的连接速率参数?一个连接间隔还是更长?
谢谢你的帮助。
奈杰尔
嗨nigelyang,
抱歉回复晚了。所以,如果我理解正确的话,您希望在每个连接间隔内触发应用程序,这是您的需求吗?
关于第二个问题,你是指连接更新参数的过程吗?通常,连接间隔由中心定义,因此您可以做的是发出连接更新请求,中心将决定是否接受您请求的连接参数。你的意思是当主服务器接受更新参数请求时需要多少?
谢谢,PM_Dialog
嗨,对话框中,
是的,我想在连接事件之间进行I2C传输。请教我怎么做?
谢谢你的帮助
奈杰尔
你好,奈杰尔,
是的,但是设备是否配置为休眠模式?一般来说,系统可以在通告或连接间隔之间进入睡眠模式。
谢谢,PM_Dialog
嗨对话框
负责发送BLE确认的代码(或功能)在哪里?我想知道代码执行的时间,允许我在发送确认后立即进行i2c传输,以确保在下一个ack之前完成i2c工作。谢谢
你好,奈杰尔,
请查看在UM-B-044: DA1468x软件平台参考用户指南。请检查以下项目:
ble_event_irq:结束发布/扫描/连接事件。用于清除/重新初始化状态和延迟TX/RX处理操作。
在这之后,请参见8.3.4钩子UM-B-056: DA1468x软件开发人员指南文档。BLE Hooks机制为用户应用程序提供了一种方法来通知特定BLE事件发生的确切时间。请参见图41:Connected。
谢谢,PM_Dialog