加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • i2c.c
    • i2c.h
    • main.c
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

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

11/06 11:34
544
阅读需 4 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

本节用到的源码路径: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):

相关推荐

电子产业图谱