查看: 286|回复: 0

[经验] 飞凌嵌入式ElfBoard ELF1板卡-i2c设备通信编程

[复制链接]

该用户从未签到

发表于 2024-11-1 11:23:58 | 显示全部楼层 |阅读模式
分享到:
本节用到的源码路径:ELF 1开发板资料包\03-例程源码\03-1 命令行例程源码\03_elf1_cmd_i2c
i2c.c
19-1.png
19-2.png
19-3.png
19-4.png
19-5.png
19-6.png
19-7.png
这段代码主要分为三部分,定义了三个用于i2c通讯的函数,用于方便地通过i2c总线进行数据的读写操作。
(一)首先,定义函数func_set_opt,用于设置i2c通信的超时时间和重试次数。它通过ioctl函数调用I2C_TIMEOUT和I2C_RETRIES命令来设置超时和重试次数。
(二)第二部分定义了函数func_write_regs,用于向设备写入寄存器数据。该函数首先创建了一个i2c_rdwr_ioctl_data类型的结构体变量work_queue,用于存储i2c通信的信息。然后,通过动态内存分配为work_queue.msgs分配了足够的内存空间,用于存储i2c通信所需的消息。之后,设置了要写入数据的相关信息,并调用ioctl函数执行i2c写操作。最后,释放动态分配的内存,并返回执行结果。
(三)第三部分定义了函数func_read_regs,用于从设备读取寄存器数据。过程与func_write_regs类似,首先创建了一个i2c_rdwr_ioctl_data类型的结构体变量work_queue,并为work_queue.msgs分配了动态内存。然后,先发送一个写操作的消息,设置要读取的寄存器地址,然后再发送一个读操作的消息,从设备读取数据。最后,将读取到的数据拷贝到buf中,并释放动态分配的内存,返回执行结果。
i2c.h
19-8.png
首先定义了一个宏常量MAX_LEN,它的值为265。这个常量表示缓冲区的最大长度。
之后,定义了一个结构体类型struct_i2c_param,包含了一些与i2c通信相关的参数,包括设备地址、寄存器地址、数据长度和数据缓冲区。
main.c
19-9.png
19-10.png
19-11.png
19-12.png
19-13.png
19-14.png
19-15.png
19-16.png
19-17.png
19-18.png
19-19.png
19-20.png
main.c主要分为三个部分:
(一)参数设置函数,参数设置函数格式为:int 参数设置函数func_set_opt(文件描述符fd):
19-21.png
(二)写入寄存器,格式为:int 写入寄存器func_write_regs(文件描述符fd,设备地址devaddr,要写入寄存器地址,要写入数据buffer *buf,要写入数据长度data_len):
19-22.png
19-23.png
(三)读寄存器,格式为:int 读取寄存器func_read_regs(文件描述符fd,要读入寄存器地址reg,要读入数据buf,要读入数据长度data_len):
19-24.png
19-25.png
19-27.png

19-26.png
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-11-17 23:34 , Processed in 0.113440 second(s), 16 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.