11浏览
查看: 11|回复: 5

[项目] 【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯

[复制链接]
【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯图1

什么是 CanMV K230?
CanMV K230是一款高性价比的RISC-V边缘AI平台,凭借低功耗、强视觉处理能力和开放的开发生态,成为嵌入式AI开发的理想选择,尤其适合需要快速部署视觉与AI功能的创客、中小企业及教育场景。CanMV 是一套 AI 视觉开发平台,K230 是其核心芯片。该模块结合了图像采集、AI推理、边缘计算等能力,适合嵌入式视觉应用开发。

CanMV:类似 OpenMV 的图像处理框架,支持 Python 编程,简化视觉识别开发流程。
K230 芯片:嘉楠科技推出的 AIoT SoC,采用 RISC-V 架构,内置第三代 KPU(AI加速单元),算力高达 6 TOPS,性能是 K210 的 13.7 倍。


【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯图2

驴友花雕  中级技神
 楼主|

发表于 7 小时前

【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯

什么是IIC (I2C, I²C) ?
I²C(Inter-Integrated Circuit,也常写作 I2C 或 IIC)是一种由飞利浦(现恩智浦 / NXP)开发的短距离串行通信总线协议,主要用于连接集成电路(IC)之间的低速数据传输,其核心特点是通过两条线实现多设备间的通信,结构简单、成本低、扩展性强。

1、核心组成与工作原理
物理线路仅需两条双向信号线:
SDA(Serial Data):串行数据线,用于传输实际数据。
SCL(Serial Clock):串行时钟线,由主设备(如 Arduino、MCU)提供时钟信号,同步数据传输节奏。
此外,所有设备需共地(GND),总线上通常接有上拉电阻(一般 4.7kΩ),确保空闲时线路处于高电平。
主从架构
主设备(Master):发起通信、控制时钟信号、决定数据传输方向(读 / 写),同一总线上可有多个主设备(需仲裁机制避免冲突)。
从设备(Slave):被动响应主设备的指令,每个从设备有唯一的 7 位或 10 位地址(7 位地址最常用,支持最多 128 个设备),通过地址被主设备选中。
通信过程基本流程为:主设备发送起始信号(SDA 从高到低,SCL 保持高电平)→ 发送从设备地址 + 读写位(1 位,读 = 1,写 = 0)→ 从设备返回应答信号(ACK)(SDA 拉低)→ 传输数据(每字节 8 位,后跟 ACK)→ 主设备发送停止信号(SDA 从低到高,SCL 保持高电平)。

2、主要特点
简单经济:仅需 2 根线,减少布线复杂度,适合小型设备(如传感器、OLED 屏、EEPROM)。
多设备支持:通过唯一地址区分从设备,总线上可挂接多个设备(受总线电容限制,通常建议不超过 10 个)。
低速传输:标准模式(100kbps)、快速模式(400kbps)、高速模式(3.4Mbps),适合非实时性数据(如温湿度、光照传感器数据)。
半双工通信:同一时间只能单向传输数据(主到从或从到主)。

3、典型应用场景
嵌入式系统:Arduino 与 OLED 屏(如 SSD1306)、温湿度传感器(如 SHT30)、加速度计(如 MPU6050)的通信。
消费电子:智能手机中的传感器模块(陀螺仪、磁力计)与主控芯片的连接。
工业控制:小型传感器(压力、液位)与 PLC 的低速数据交互。
存储设备:EEPROM(电可擦除存储器)与 MCU 的数据读写(如 AT24C02)。

4、与其他总线的对比
相比SPI:I²C 线数更少(2 线 vs SPI 的 4 线),但速度更低,适合轻量场景;SPI 支持全双工,速度更快(可达几十 Mbps)。
相比UART:I²C 支持多设备,而 UART 通常是点对点通信,且无需定义波特率(依赖时钟同步)。
总之,I²C 是一种 “以简单换效率” 的总线协议,在低速、多设备的短距离通信中应用广泛,尤其适合资源受限的嵌入式系统。

【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯图2

【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 7 小时前

【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯

使用K230的 I2C 接口进行通信

这里用K230的IIC1,点亮一块128*32的OLED屏幕作为IIC的使用示例

【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯图1

【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯图2

【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯图3

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 7 小时前

【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯

项目测试实验代码

  1. # 【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯
  2. # 项目功能:通过I2C总线驱动SSD1306 OLED显示屏,实现基本的文字显示和像素操作
  3. # 导入 machine 模块中的 I2C 和 FPIOA 类
  4. # I2C: 用于I2C总线通信
  5. # FPIOA: 用于引脚功能重映射配置(Field Programmable I/O Array)
  6. from machine import I2C
  7. from machine import FPIOA
  8. # 导入 ssd1306 模块中的 SSD1306_I2C 类
  9. # 提供SSD1306 OLED显示屏的I2C驱动功能
  10. from ybUtils.ssd1306 import SSD1306_I2C
  11. # 导入时间模块
  12. # 用于后续可能的时间控制操作(如延时)
  13. import time
  14. # 实例化 FPIOA 对象
  15. # FPIOA是K230特有的灵活IO配置器,可以动态配置引脚功能
  16. fpioa = FPIOA()
  17. # 创建 I2C 实例,使用 I2C 通道 1
  18. # 参数说明:
  19. # - id=1: 使用I2C1控制器
  20. # - 其他参数使用默认值(频率等)
  21. i2c = I2C(1)
  22. # 配置引脚功能 - 这是K230开发的关键步骤:
  23. # 将GPIO引脚映射到特定的外设功能
  24. # 配置GPIO 34引脚为I2C1_SCL(时钟线)功能
  25. # 参数说明:
  26. # - 34: 物理引脚编号
  27. # - FPIOA.IIC1_SCL: 功能选择为I2C1时钟线
  28. # - oe=1: 输出使能
  29. # - ie=1: 输入使能  
  30. # - pu=1: 上拉电阻使能(保证总线空闲时为高电平)
  31. # - st=1: 施密特触发器使能(提高信号质量)
  32. # - ds=15: 驱动强度设置(控制输出电流能力)
  33. fpioa.set_function(34, FPIOA.IIC1_SCL, oe=1, ie=1, pu=1, st=1, ds=15)
  34. # 配置GPIO 35引脚为I2C1_SDA(数据线)功能
  35. # 参数与SCL配置相同,确保总线一致性
  36. fpioa.set_function(35, FPIOA.IIC1_SDA, oe=1, ie=1, pu=1, st=1, ds=15)
  37. # 创建 SSD1306 OLED 显示器实例
  38. # 参数说明:
  39. # - 128: 显示屏宽度(像素)
  40. # - 32: 显示屏高度(像素)
  41. # - i2c: 使用的I2C总线实例
  42. # 注意:这里假设OLED设备的I2C地址使用默认值0x3C
  43. oled = SSD1306_I2C(128, 32, i2c)
  44. # 清除 OLED 显示器的内容(清屏)
  45. # 参数0表示将所有像素设置为关闭状态(黑色)
  46. oled.fill(0)
  47. # 在 OLED 显示器上显示文字
  48. # 参数说明:
  49. # - 'Hello Yahboom': 要显示的文本内容
  50. # - 0: 文本起始x坐标(最左侧)
  51. # - 10: 文本起始y坐标(从顶部向下10像素)
  52. # 注意:SSD1306的文本渲染使用内置的8x8像素字体
  53. oled.text('Hello Yahboom', 0, 10)
  54. # 像素级操作演示:遍历OLED显示器的所有像素
  55. # 外层循环遍历x坐标(0到127)
  56. for x in range(128):
  57.     # 内层循环遍历y坐标(0到31)
  58.     for y in range(32):
  59.         # 获取指定坐标像素的当前状态
  60.         # 返回值:1表示像素点亮,0表示像素熄灭
  61.         a = oled.pixel(x, y)
  62.         
  63.         # 如果检测到像素点亮(值为1),则在串口打印该像素坐标
  64.         # 这个功能主要用于调试,可以查看哪些像素被文字渲染点亮
  65.         if a == 1:
  66.             print(x, y)  # 输出格式:"x坐标 y坐标"
  67. # 更新 OLED 显示器的内容
  68. # 这是关键步骤:将前面所有的绘图操作(fill、text等)真正发送到硬件显示
  69. # 在调用show()之前,所有操作都在内存缓冲区中进行,不会立即显示
  70. oled.show()
  71. # 程序执行流程总结:
  72. # 1. 配置硬件引脚功能
  73. # 2. 初始化I2C总线和OLED设备
  74. # 3. 清空屏幕并在指定位置显示文字
  75. # 4. 扫描所有像素并输出被点亮像素的坐标
  76. # 5. 最终将缓冲区的所有内容更新到物理显示屏
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 7 小时前

【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯

关键知识点补充:

1、I2C总线特点:
双线制(SCL时钟线 + SDA数据线)
多主多从架构
地址寻址通信

2、SSD1306显示屏:
常见的128x32或128x64分辨率OLED驱动芯片
使用I2C接口时默认地址通常是0x3C或0x3D

3、FPIOA的重要性:
K230芯片的特色功能,引脚功能可编程
必须正确配置才能使用各种外设功能
提供了极大的硬件连接灵活性

4、双缓冲显示:
绘图操作先在内存缓冲区进行
show()方法将缓冲区内容一次性发送到显示屏
避免闪烁,提高显示效率

这个示例完整展示了从硬件配置到应用层操作的完整I2C设备驱动流程。
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 7 小时前

【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯

代码执行的流程图如下:

【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯图2

实验场景图

【花雕动手做】CanMV K230 AI视觉识别模块之使用 I2C 通讯图1

回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail