• 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard ELF 1板卡-i2c与从设备通讯编程示例之i2c设备通信编程

2024/11/06
627
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

本节用到的源码路径:ELF 1开发板资料包3-例程源码3-1 命令行例程源码3_elf1_cmd_i2c

i2c.c

这段代码主要分为三部分,定义了三个用于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

首先定义了一个宏常量MAX_LEN,它的值为265。这个常量表示缓冲区的最大长度。

之后,定义了一个结构体类型struct_i2c_param,包含了一些与i2c通信相关的参数,包括设备地址、寄存器地址、数据长度和数据缓冲区。

main.c

main.c主要分为三个部分:

(一)参数设置函数,参数设置函数格式为:int 参数设置函数func_set_opt(文件描述符fd):

(二)写入寄存器,格式为:int 写入寄存器func_write_regs(文件描述符fd,设备地址devaddr,要写入寄存器地址,要写入数据buffer *buf,要写入数据长度data_len):

(三)读寄存器,格式为:int 读取寄存器func_read_regs(文件描述符fd,要读入寄存器地址reg,要读入数据buf,要读入数据长度data_len):

飞凌嵌入式

飞凌嵌入式

保定飞凌嵌入式技术有限公司,创建于2006年,是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业,是国内较早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累,公司拥有业内优秀的软硬件研发团队,在北京及保定建立两大研发基地,在苏州、深圳设有华东、华南技术服务中心,并在北美、欧洲以及亚太等其他国家和地区拥有国际业务网络。公司研发的智能设备核心平台广泛应用于物联网、工控、轨道交通、医疗、电力、商业电子、智能家居、安防、机器人、环境监测等诸多领域。

保定飞凌嵌入式技术有限公司,创建于2006年,是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业,是国内较早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累,公司拥有业内优秀的软硬件研发团队,在北京及保定建立两大研发基地,在苏州、深圳设有华东、华南技术服务中心,并在北美、欧洲以及亚太等其他国家和地区拥有国际业务网络。公司研发的智能设备核心平台广泛应用于物联网、工控、轨道交通、医疗、电力、商业电子、智能家居、安防、机器人、环境监测等诸多领域。收起

查看更多

相关推荐