hi, Qinjiny_Dialog
IIC对OLED的write的发送方式为ad_i2c_async_transact;写多帧数据的时候,会有数据丢失,IIC总线没发送完成就stop了。导致我的OLED花屏。经过测试,发现关掉蓝牙广播之后,就不会有花屏的现象出现。可能蓝牙的活动影响到了IIC通讯。请教一下,如何协调IIC发送和蓝牙的相关活动?
可以尝试用OS_ENTER_CRITICAL_SECTION()进入系统临界区保证发送不被其它活动中断,完成传输后OS_LEAVE_CRITICAL_SECTION回到正常状态。
注意不要过于长时间或者过于频繁的使用这个功能,进入临界区会阻止其他所有中断,时间长了会影响整个系统的正常schedule。
hi,Qinjiny_Dialog多谢你的回答,我用逻辑分析仪看了,发完一个全屏的数据,大概需要40ms(iic_speed = 400khz).40ms的屏蔽中断时间是否可能会有其他的蓝牙的问题?还有,我是打算使用DMA来做的,但是配置完I2C_SLAVE_DEVICE_DMA(I2C2, SSD1306, 0x3c, HW_I2C_ADDRESSING_7B, HW_I2C_SPEED_FAST, 2)后,使用hw_i2c_write_buffer_dma_ex() 发送数据,但是打印出来的device->dma_channel = -1;也就是说,IIC的使用没有使用DMA通道。请问,我还需要做什么配置来激活dma通道吗?
Hi sir,
你也可以尝试提高I2c的Clock 频率,最好是使用spi接口的屏,数据传得快
hi, JelphiIIC已经是400khz了。硬件他们已经做好了,暂时没法修改了。只能以后的项目在修改了。多谢你的回答!祝好!
Hi sir,
这不是一个好的选择:用I2c去刷屏,这决定了你始终会拉慢系统的性能,另外,你在用i2c 一定要使用dma
Hi,Jelphi嗯嗯,多谢你的建议。dma在用的时候,也是没有文档可以看怎么来配置。可以简要说下IIC使用dma的配置流程不,我配置玩后,发现还是没有启动dma通道。
------------------------------------------------------------------------------------------------------------------------结婚,2017-03-08 07:48kingwheathi,Qinjiny_Dialog多谢你的回答,我用逻辑分析仪看了,发完一个全屏的数据,大概需要40ms(iic_speed = 400khz).40ms的屏蔽中断时间是否可能会有其他的蓝牙的问题?还有,我是打算使用DMA来做的,但是配置完I2C_SLAVE_DEVICE_DMA(I2C2, SSD1306, 0x3c, HW_I2C_ADDRESSING_7B, HW_I2C_SPEED_FAST, 2)后,使用hw_i2c_write_buffer_dma_ex() 发送数据,但是打印出来的device->dma_channel = -1;也就是说,IIC的使用没有使用DMA通道。请问,我还需要做什么配置来激活dma通道吗?-------------------------------------------------------------------------------------------------------------------------
dma 在sdk中已有配置,你是否其他地方申请了相同的dma channel,代码可以debug
可以尝试用OS_ENTER_CRITICAL_SECTION()进入系统临界区保证发送不被其它活动中断,完成传输后OS_LEAVE_CRITICAL_SECTION回到正常状态。
注意不要过于长时间或者过于频繁的使用这个功能,进入临界区会阻止其他所有中断,时间长了会影响整个系统的正常schedule。
hi,Qinjiny_Dialog
多谢你的回答,我用逻辑分析仪看了,发完一个全屏的数据,大概需要40ms(iic_speed = 400khz).40ms的屏蔽中断时间是否可能会有其他的蓝牙的问题?
还有,我是打算使用DMA来做的,但是配置完I2C_SLAVE_DEVICE_DMA(I2C2, SSD1306, 0x3c, HW_I2C_ADDRESSING_7B, HW_I2C_SPEED_FAST, 2)后,
使用hw_i2c_write_buffer_dma_ex() 发送数据,但是打印出来的device->dma_channel = -1;
也就是说,IIC的使用没有使用DMA通道。请问,我还需要做什么配置来激活dma通道吗?
Hi sir,
你也可以尝试提高I2c的Clock 频率,最好是使用spi接口的屏,数据传得快
hi, Jelphi
IIC已经是400khz了。硬件他们已经做好了,暂时没法修改了。只能以后的项目在修改了。多谢你的回答!
祝好!
Hi sir,
这不是一个好的选择:用I2c去刷屏,这决定了你始终会拉慢系统的性能,另外,你在用i2c 一定要使用dma
Hi,Jelphi
嗯嗯,多谢你的建议。dma在用的时候,也是没有文档可以看怎么来配置。可以简要说下IIC使用dma的配置流程不,我配置玩后,发现还是没有启动dma通道。
------------------------------------------------------------------------------------------------------------------------
结婚,2017-03-08 07:48
kingwheat
hi,Qinjiny_Dialog
多谢你的回答,我用逻辑分析仪看了,发完一个全屏的数据,大概需要40ms(iic_speed = 400khz).40ms的屏蔽中断时间是否可能会有其他的蓝牙的问题?
还有,我是打算使用DMA来做的,但是配置完I2C_SLAVE_DEVICE_DMA(I2C2, SSD1306, 0x3c, HW_I2C_ADDRESSING_7B, HW_I2C_SPEED_FAST, 2)后,
使用hw_i2c_write_buffer_dma_ex() 发送数据,但是打印出来的device->dma_channel = -1;
也就是说,IIC的使用没有使用DMA通道。请问,我还需要做什么配置来激活dma通道吗?
-------------------------------------------------------------------------------------------------------------------------
dma 在sdk中已有配置,你是否其他地方申请了相同的dma channel,代码可以debug