找回密码
 立即注册
查看: 107|回复: 5

大老帮忙看下用硬件I2C驱动OLED,为什么刷屏速度还没软件方式快

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:49
  • 最近打卡:2025-05-01 22:03:38
已绑定手机

2

主题

28

回帖

280

积分

中级会员

积分
280
发表于 2025-4-6 11:45:53 | 显示全部楼层 |阅读模式
大老帮忙看下用硬件I2C驱动OLED,为什么刷屏速度还没软件方式快,
是不是IO接口需要设置过,OLED采用SDD1306驱动,采用水平地址模式显示,
硬件I2C采用ISP软件提供的查询方式发送数据,不知道这硬件I2C怎么速度会这么慢

stc32g_cdc_test_i2c_soft_hard.zip

307.86 KB, 下载次数: 4

回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-6 11:48:00 | 显示全部楼层
在使用硬件I2C驱动OLED时,刷屏速度较慢的问题可能由多个因素引起。以下是一些可能的原因及相应的优化建议:

1. I2C时钟频率设置:
硬件I2C的时钟频率(SCL)直接影响数据传输速度。如果时钟频率设置过低,数据传输速度会显著下降。建议检查并适当提高I2C时钟频率,但需确保不超过OLED模块和MCU的最大支持频率。

2. I2C总线负载:
I2C总线上的设备数量和总线电容会影响信号传输速度。如果总线上连接了多个设备,或者总线走线过长,可能会导致信号延迟。建议优化总线布局,减少总线电容,或使用I2C总线扩展器。

3. I2C通信模式:
硬件I2C通常支持标准模式(100kHz)、快速模式(400kHz)和高速模式(3.4MHz)。确保使用适合的通信模式,并检查OLED模块是否支持更高的通信速率。

4. 数据发送方式:
使用查询方式发送数据可能会引入额外的延迟。考虑使用中断或DMA(直接内存访问)方式发送数据,以减少CPU的负担和提高数据传输效率。

5. OLED驱动配置:
SSD1306驱动芯片的配置也会影响刷屏速度。确保使用水平地址模式,并优化显示数据的组织方式,减少不必要的地址切换和数据传输。

6. MCU性能:
MCU的处理能力和资源分配也会影响I2C通信速度。如果MCU在处理其他任务时资源紧张,可能会导致I2C通信延迟。建议优化MCU的任务调度,确保I2C通信有足够的处理资源。

7. 软件优化:
软件实现中可能存在不必要的延迟或冗余操作。建议审查代码,优化数据传输流程,减少不必要的函数调用和条件判断。

8. 硬件I2C与软件I2C的比较:
软件I2C通常通过GPIO模拟I2C协议,虽然灵活性高,但在高频率下可能不如硬件I2C稳定。硬件I2C虽然理论上速度更快,但如果配置不当,实际速度可能不如软件实现。因此,需要综合考虑硬件和软件的优缺点,进行合理配置。

综上所述,通过优化I2C时钟频率、总线负载、通信模式、数据发送方式、OLED驱动配置、MCU性能以及软件实现,可以有效提高硬件I2C驱动OLED的刷屏速度。建议逐一排查上述因素,找到性能瓶颈并进行针对性优化。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2025-4-6 11:57:02 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2025-4-6 12:01:22 | 显示全部楼层
硬件I2C 不一定比 软件I2C 快,
硬件可以并行执行,可以让 CPU 大量时间处于休息状态,或让CPU 去并行处理其他的事,
软件模拟I2C只能让CPU疲于奔命,影响其他事件的执行
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-4-6 12:02:21 | 显示全部楼层
注意I2C时钟频率,实测SOLOMON SYSTECH的IC能超频到900K
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:49
  • 最近打卡:2025-05-01 22:03:38
已绑定手机

2

主题

28

回帖

280

积分

中级会员

积分
280
发表于 2025-4-10 11:07:07 | 显示全部楼层
//    I2CCFG = 0xe0;                              //使能I2C主机模式
//    I2CMSST = 0x00;
//    EA = 1;
void I2C_Init(){
    P_SW2 = 0x80;
    P_SW2 |= 0x30;				//I2C: I2CSCL(P3.2), I2CSDA(P3.3)
    I2CCFG = 0xC0;                              //使能I2C主机模式
//    I2CPSCR = 0x00;                             //MSSPEED[13:0]总线速度设置
    // I2CMSAUX = 0x01;                            //使能自动发送功能
    I2CMSST = 0x00;
    EA = 1;
}

终于知道原因了是自己参考例程代码将I2C总线的速率倍率太大,导致刷屏速度这么慢的,将速度设置到系统时钟/8,在24MHZ时,OLED刷屏速度达到了112帧

微信图片_20250410110559.jpg

回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:30 , Processed in 0.147087 second(s), 80 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表