0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Milk-V Duo开发板免费体验 I2C分析

wakojosin 来源:wakojosin 作者:wakojosin 2023-07-21 10:53 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

I2C需要分两部分进行修改,第一部分是设备树的配置,这部分主要是有关I2C控制器相关的参数、中断等,另一部分是硬件引脚的配置,由于驱动用的是i2c-designware的通用驱动,所以需要读取进行IO初始化,这就出现了额外的操作,希望后面对驱动进行适配,可以从设备树对引脚进行配置,自动完成初始化。

下面就来看看I2C驱动的大概过程吧:

设备树

// linux_5.10/arch/riscv/boot/dts/cvitek/cv180x_base.dtsi
i2c0: i2c@04000000 {
	compatible = "snps,designware-i2c";
	clocks = <  &clk CV180X_CLK_I2C  >;
	reg = <  0x0 0x04000000 0x0 0x1000  >;
	clock-frequency = <  400000  >;

	#size-cells = <  0x0  >;
	#address-cells = <  0x1  >;
	resets = <  &rst RST_I2C0  >;
	reset-names = "i2c0";
};

// linux_5.10/arch/riscv/boot/dts/cvitek/cv180x_base_riscv.dtsi
i2c0: i2c@04000000 {
	interrupts = <  49 IRQ_TYPE_LEVEL_HIGH  >;
	interrupt-parent = <  &plic0  >;
};

驱动源码

使用的是i2c designware的框架。

控制器驱动

// linux_5.10/drivers/i2c/busses/i2c-designware-platdrv.c
dw_i2c_plat_probe(struct platform_device *pdev):
	i2c_dw_probe(struct dw_i2c_dev *dev)
		i2c_dw_probe_master(struct dw_i2c_dev *dev)
			i2c_add_numbered_adapter(struct i2c_adapter *adap)
				i2c_add_adapter(struct i2c_adapter *adapter)
					i2c_register_adapter(struct i2c_adapter *adap)
						device_register(struct device *dev) // 注册设备

设备驱动

// linux_5.10/drivers/i2c/i2c-core-base.c
i2c_register_driver(struct module *owner, struct i2c_driver *driver)
	driver_register(&driver->driver); // 注册驱动

通过device_register和driver_register会进行match和probe的操作,从而关联起来I2C适配器和设备驱动。

对于详细得展开需要进一步的学习。

应用编程

i2c的驱动编程就是open/read/write/ioctrl这一套。

uint8_t reg_addr = 0x00;
uint8_t data_buf[2];

// 打开设备
int i2c_fd = open("/dev/i2c-0", O_RDWR);

// 方式一:
// 设置从机地址
ioctl(i2c_fd, I2C_SLAVE, slave_addr);
write(i2c_fd, 0, ®_addr, 1);
read(i2c_fd, 0, data_buf, 2);

// 方式二:
struct i2c_rdwr_ioctl_data rdwr;
struct i2c_msg msgs[2];
msgs[0].addr  = I2C_SLAVE;
msgs[0].flags = 0;
msgs[0].len   = 1;
msgs[0].buf   = ®_addr;
msgs[1].addr  = I2C_SLAVE;
msgs[1].flags = I2C_M_RD;
msgs[1].len   = 2;
msgs[1].buf   = data_buf;
rdwr.msgs  = msgs;
rdwr.nmsgs = 2;
ioctl(file, I2C_RDWR, &rdwr);

以上两种方式选择其中一种就行。

接下去就用温湿度传感器测试一下i2c总线的使用,演示过程后面通过视频展示。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    114

    文章

    17643

    浏览量

    190261
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1547

    浏览量

    130488
  • 温湿度传感器

    关注

    6

    文章

    627

    浏览量

    37364
  • 开发板
    +关注

    关注

    25

    文章

    6123

    浏览量

    113350
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Milk-V Duo】1、入门篇

    入门milk-V Duo开发板
    的头像 发表于 07-07 11:21 2555次阅读
    【<b class='flag-5'>Milk-V</b> <b class='flag-5'>Duo</b>】1、入门篇

    Milk-V Duo开发板免费体验】Milk-V初次使用

    Milk-V Duo开发板免费体验】Milk-V初次使用
    的头像 发表于 08-08 09:03 3237次阅读
    【<b class='flag-5'>Milk-V</b> <b class='flag-5'>Duo</b><b class='flag-5'>开发板</b><b class='flag-5'>免费</b>体验】<b class='flag-5'>Milk-V</b>初次使用

    Milk-V Duo S 开发板免费体验】人脸检测

    ; 执行步骤 网络配置,详见:Milk-V Duo S 网络连接、分区扩展、外壳设计. 将摄像头与开发板的 J2 接口连接,注意接口定义。 使用 Type-
    发表于 07-27 16:53

    Milk-V Duo S 开发板免费体验】测试舵机

    , for GNU/Linux 3.7.0, BuildID[sha1]=11b670c34a8bea79c366ba4d95c35978c5eb25e8, with debug_info, not stripped 三、测试验证 拷贝到Milk-V
    发表于 08-09 22:46

    【作品合集】群芯闪耀Milk-V Duo S 开发板测评

    :【RISC-V专题】Milk-V Duo S 开发板免费试用 作者:zealsoft【Milk-V
    发表于 09-16 11:03

    Milk-V Duo 开发板免费体验】 + 系统镜像烧录以及登录

    Milk-V Duo 开发板免费体验】+系统镜像烧录以及登录 一.Milk-V Duo
    发表于 07-11 11:43

    Milk-V Duo 开发板免费体验】Milk-V Duo之开箱初体验

    一,第一印象 外观设计方面,Milk-V Duo以简约而精致的风格为主,采用沉金工艺,给人一种高端大气的感觉。开发板的尺寸小巧,便于携带和使用,在我拿到的所有的开发板中,也只有
    发表于 07-16 01:15

    Milk-V Duo 开发板免费体验】Milk-V Duo 开发板学习初体验

    milkv-duo-20230616-2232.img自制成linux启动盘 3、通过Type-C数据线连接电脑,小板系统顺畅的启动了 登录Milk-V Duo小板的系统耍耍吧 1、正
    发表于 07-28 15:58

    Milk-V Duo 开发板免费体验】开发板使用3

    接上文 【Milk-V Duo 开发板免费体验】开发板使用1 |和接上文 【Milk-V
    发表于 07-29 08:17

    Milk-V Duo 开发板免费体验】milkv-duo 申请成功体验

    。 引脚图 总结 Milk-V Duo开发板的小巧精致设计和强悍的性能确实为创客和开发者提供了一个优秀的平台。它的紧凑设计使得它适用于各种空间有限的场景,同时强大的性能可以支持复杂
    发表于 07-29 14:31

    Milk-V Duo 开发板免费体验】Milk-V Duo 开发板初体验

    Milk-V Duo开发板(图4)是一款基于CV1800B芯片(RISC-V架构,C906@1Ghz +
    发表于 08-18 00:26

    Milk-V Duo 开发板免费体验】4-Linux控制小车动作(原创)首发

    Milk-V Duo 开发板免费体验】2控制螺旋桨电路https://bbs.elecfans.com/jishu_2371054_1_
    发表于 08-21 02:11

    Milk-V Duo 开发板免费体验】初体验及开箱视频

    刚刚收到开发板,给大家做个视频来初步了解以下Milk-V Duo 开发板Milk-V Duo
    发表于 08-22 23:59

    Milk-V Duo开发板免费体验】评测三、I2C功能摸索

    调试milkv duoi2c功能
    的头像 发表于 07-28 08:59 2305次阅读
    【<b class='flag-5'>Milk-V</b> <b class='flag-5'>Duo</b><b class='flag-5'>开发板</b><b class='flag-5'>免费</b>体验】评测三、<b class='flag-5'>I2C</b>功能摸索

    Milk-V Duo S 开发板免费体验 加焊EMMC 烧录系统

    Milk-V Duo S 开发板免费体验】
    的头像 发表于 08-20 09:24 722次阅读
    <b class='flag-5'>Milk-V</b> <b class='flag-5'>Duo</b> S <b class='flag-5'>开发板</b><b class='flag-5'>免费</b>体验 加焊EMMC 烧录系统