IIC发送数据的时候,被蓝牙活动打断了,如何协调

8个职位/ 0个新职位
最后发表
kingwheat
离线
最后看到:1年2个月前
加入:2016-12-08 09:21
IIC发送数据的时候,被蓝牙活动打断了,如何协调

嗨,Qinjiny_Dialog

IIC对OLED的写的发送方式为ad_i2c_async_transact;写多帧数据的时候,会有数据丢失,IIC总线没发送完成就停止了。导致我的OLED花屏。
经过测试,发现关掉蓝牙广播之后,就不会有花屏的现象出现。可能蓝牙的活动影响到了IIC通讯。
请教一下,如何协调IIC发送和蓝牙的相关活动吗?

设备:
Qinjiny_Dialog
离线
最后看到:2个月2周以前
工作人员
加入:2016-11-01 05:47
可以尝试用OS_ENTER_CRITICAL

可以尝试用OS_ENTER_CRITICAL_SECTION()进入系统临界区保证发送不被其它活动中断,完成传输后OS_LEAVE_CRITICAL_SECTION回到正常状态。

注意不要过于长时间或者过于频繁的使用这个功能,进入临界区会阻止其他所有中断,时间长了会影响整个系统的正常的时间表。

kingwheat
离线
最后看到:1年2个月前
加入:2016-12-08 09:21
嗨,Qinjiny_Dialog

嗨,Qinjiny_Dialog
多谢你的回答,我用逻辑分析仪看了,发完一个全屏的数据,大概需要40毫秒(iic_speed = 400 khz) .40ms的屏蔽中断时间是否可能会有其他的蓝牙的问题吗?
还有,我是打算使用DMA来做的,但是配置完I2C_SLAVE_DEVICE_DMA (I2C2 SSD1306 0 x3c, HW_I2C_ADDRESSING_7B, HW_I2C_SPEED_FAST, 2)后,
使用hw_i2c_write_buffer_dma_ex()发送数据,但是打印出来的设备- > dma_channel = 1;
也就是说,IIC的使用没有使用DMA通道。请问,我还需要做什么配置来激活dma通道吗?

Jelphi
离线
最后看到:8个月2个星期前
工作人员
加入:2015-09-10 12:07
你好先生,

你好先生,

你也可以尝试提高I2c的时钟频率,最好是使用spi接口的屏,数据传得快

kingwheat
离线
最后看到:1年2个月前
加入:2016-12-08 09:21
嗨,Jelphi

嗨,Jelphi
IIC已经是400千赫了。硬件他们已经做好了,暂时没法修改了。只能以后的项目在修改了。多谢你的回答!
祝好!

Jelphi
离线
最后看到:8个月2个星期前
工作人员
加入:2015-09-10 12:07
你好先生,

你好先生,

这不是一个好的选择:用I2c去刷屏,这决定了你始终会拉慢系统的性能,另外,你在用I2c一定要使用dma

kingwheat
离线
最后看到:1年2个月前
加入:2016-12-08 09:21
嗨,Jelphi

嗨,Jelphi
嗯嗯,多谢你的建议。dma在用的时候,也是没有文档可以看怎么来配置。可以简要说下IIC使用dma的配置流程不,我配置玩后,发现还是没有启动dma通道。

------------------------------------------------------------------------------------------------------------------------
结婚,2017-03-08 07:48
kingwheat
嗨,Qinjiny_Dialog
多谢你的回答,我用逻辑分析仪看了,发完一个全屏的数据,大概需要40毫秒(iic_speed = 400 khz) .40ms的屏蔽中断时间是否可能会有其他的蓝牙的问题吗?
还有,我是打算使用DMA来做的,但是配置完I2C_SLAVE_DEVICE_DMA (I2C2 SSD1306 0 x3c, HW_I2C_ADDRESSING_7B, HW_I2C_SPEED_FAST, 2)后,
使用hw_i2c_write_buffer_dma_ex()发送数据,但是打印出来的设备- > dma_channel = 1;
也就是说,IIC的使用没有使用DMA通道。请问,我还需要做什么配置来激活dma通道吗?
-------------------------------------------------------------------------------------------------------------------------

Jelphi
离线
最后看到:8个月2个星期前
工作人员
加入:2015-09-10 12:07
dma在sdk中已有配置

dma在sdk中已有配置,你是否其他地方申请了相同的dma通道,代码可以调试