news 2026/9/25 10:43:56

uboot添加一个I2C设备

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
uboot添加一个I2C设备

uboot 添加一个I2C设备 ,简单的测试一下读写,都正常

先添加设备树

&i2c6{status="okay";pinctrl-names="default";pinctrl-0=<&i2c6m2_xfer>;psensor@53{compatible="pesensor_ltr578";reg=<0x53>;pinctrl-names="default";pinctrl-0=<&gpio2_b0>;ltr578_irq_pin=<&gpio2 RK_PB0 GPIO_ACTIVE_LOW>;status="okay";};};

再添加

makefile:obj-$(CONFIG_AXXF_I2CTEST)+=axxf_i2ctest.o Kconfig:config AXXF_I2CTEST bool"AXXF I2C test driver"help Enable the custom I2C test driverforAXXF.Select thisifyou want to use axxf_i2ctest driver._defconfig:CONFIG_AXXF_I2CTEST=y
#include<common.h>#include<clk.h>#include<dm.h>#include<errno.h>#include<fdtdec.h>#include<i2c.h>#include<asm/io.h>#include"axxf_i2ctest.h"#include<asm/gpio.h>structi2ctest_priv_data{structudevice*dev;structgpio_descirq_gpio;};inti2ctest_i2c_write(structi2ctest_priv_data*priv_data,u8 reg,u8 val){intret;u8 buf[2];structi2c_msgmsg;structdm_i2c_chip*chip=dev_get_parent_platdata(priv_data->dev);buf[0]=reg;buf[1]=val;msg.addr=chip->chip_addr;msg.flags=0;msg.len=2;msg.buf=buf;ret=dm_i2c_xfer(priv_data->dev,&msg,1);if(ret){printf("i2ctest i2c write failed: %d\n",ret);returnret;}return0;}inti2ctest_i2c_read(structi2ctest_priv_data*priv_data,u8 reg,u8*val){intret;u8 data;structdm_i2c_chip*chip=dev_get_parent_platdata(priv_data->dev);structi2c_msgmsg[]={{.addr=chip->chip_addr,.flags=0,.buf=(u8*)&reg,.len=1,},{.addr=chip->chip_addr,.flags=I2C_M_RD,.buf=(u8*)&data,.len=1,}};ret=dm_i2c_xfer(priv_data->dev,msg,2);if(ret){printf("i2ctest i2c read failed: %d\n",ret);returnret;}*val=data;return0;}staticintxxf_i2ctest_remove(structudevice*dev){printf("%s---------------------\r\n",__func__);return0;}staticintast_i2c_probe(structudevice*dev){intret;u8 reg;structi2ctest_priv_data*i2ctest_priv=dev_get_priv(dev);printf("%s---------------------\r\n",__func__);i2ctest_priv->dev=dev;ret=gpio_request_by_name(dev,"ltr578_irq_pin",0,&i2ctest_priv->irq_gpio,GPIOD_IS_IN);if(ret){printf("Cannot get irq_gpio GPIO: %d\n",ret);returnret;}ret=dm_gpio_get_value(&i2ctest_priv->irq_gpio);printf("dm_gpio_get_value: %d\n",ret);ret=i2ctest_i2c_read(i2ctest_priv,0x06,&reg);if(ret){printf("Cannot get priv_data : %d\n",ret);returnret;}printf("0x06 reg: %x\n",reg);ret=i2ctest_i2c_read(i2ctest_priv,0x05,&reg);if(ret){printf("Cannot get priv_data : %d\n",ret);returnret;}printf("0x05 reg: %x\n",reg);reg=0x03;ret=i2ctest_i2c_write(i2ctest_priv,0x05,reg);ret=i2ctest_i2c_read(i2ctest_priv,0x05,&reg);if(ret){printf("Cannot get priv_data : %d\n",ret);returnret;}printf("0x05 - 2 reg: %x\n",reg);return0;}staticconststructudevice_idast_i2c_ids[]={{.compatible="pesensor_ltr578"},{},};U_BOOT_DRIVER(axxf_i2ctest)={.name="axxf_i2ctest",.id=UCLASS_I2C_GENERIC,.of_match=ast_i2c_ids,.probe=ast_i2c_probe,.remove=xxf_i2ctest_remove,.priv_auto_alloc_size=sizeof(structi2ctest_priv_data),};

放到board.c board_late_init 里面调用

staticintxxf_i2ctest_func(void){structudevice*bus;intret;ret=uclass_get_device_by_driver(UCLASS_I2C_GENERIC,DM_GET_DRIVER(axxf_i2ctest),&bus);//if(ret){printf("get i2c6 bus failed\n");returnret;}printf("ltr578 device probed\n");return0;}

运行结果如下:

------------------------------------------board_late_init...------------------------------------------setup_download_mode...enter_kernel,time=1000CLK:(uboot.arm:enter1008000KHz,init1008000KHz,kernel0N/A)bpll816000KHz lpll816000KHz vpll594000KHz aupll786432KHz cpll1000000KHz gpll1188000KHz ppll1300000KHz aclk_bus_root396000KHz pclk_bus_root100000KHz hclk_bus_root198000KHz aclk_top786432KHz aclk_top_mid396000KHz pclk_top100000KHz hclk_top200000KHz I2c6 speed:100000Hz ast_i2c_probe---------------------dm_gpio_get_value:00x06reg:b10x05reg:10x05-2reg:3ltr578 device probed Net:Net Initialization Skipped No ethernet found.Hit key to stopautoboot('CTRL+C'):0=><INTERRUPT>=><INTERRUPT>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/22 7:13:26

LobeChat能否撰写专利说明书?知识产权助手

LobeChat能否撰写专利说明书&#xff1f;知识产权助手 在人工智能加速渗透专业领域的今天&#xff0c;一个现实的问题摆在技术团队和知识产权从业者面前&#xff1a;AI 能否真正参与高门槛的法律文书撰写&#xff1f; 尤其是像专利说明书这样结构严谨、术语精确、逻辑严密的文本…

作者头像 李华
网站建设 2026/9/24 19:12:01

发表一篇SCI需要花多少钱?

发表一篇SCI需要花多少钱&#xff1f;SCI论文版面费一般多少钱&#xff1f;下面淘淘论文给大家讲一下SCI论文发表费用的问题。一、OA期刊和非OA期刊的区别OA期刊&#xff08;Open Access Journals&#xff09;是开放获取期刊&#xff0c;又分为金色开放获取&#xff08;Gold Op…

作者头像 李华
网站建设 2026/9/2 2:48:37

SCA这东西,别光会用,得搞懂它到底是怎么回事

我干了十几年安全&#xff0c;从最早配防火墙策略&#xff0c;到现在折腾容器安全、搞DevSecOps&#xff0c;发现一个规律&#xff1a;很多技术&#xff0c;你要是只停在“会用”的层面&#xff0c;早晚得被坑。SCA&#xff08;软件成分分析&#xff09;就是个典型的例子。现在…

作者头像 李华
网站建设 2026/9/1 19:49:11

Spring Boot接口添加响应头的核心方案

Spring Boot接口添加响应头的核心方案 在Spring Boot中,添加响应头主要分为局部接口自定义和全局统一设置两类场景,以下是具体实现方法: 方案1:局部接口通过HttpServletResponse添加(最直接) 在Controller方法中注入HttpServletResponse对象,通过setHeader()或addHeader…

作者头像 李华
网站建设 2026/9/25 7:34:36

LobeChat能否用于编写Ansible Playbook?IT自动化脚本生成

LobeChat 能否用于编写 Ansible Playbook&#xff1f;——自然语言驱动 IT 自动化的实践探索 在现代 IT 运维中&#xff0c;一个常见的困境是&#xff1a;明明知道应该用自动化来提升效率&#xff0c;却总被写脚本这件事卡住。尤其是对于 Ansible 这类声明式工具&#xff0c;虽…

作者头像 李华
网站建设 2026/9/25 8:35:02

YOLOv8深度解析:为什么它成为大模型微调新宠?

YOLOv8深度解析&#xff1a;为什么它成为大模型微调新宠&#xff1f; 在智能摄像头遍布工厂车间、自动驾驶车辆穿梭于城市街道的今天&#xff0c;一个共同的技术挑战摆在面前&#xff1a;如何让机器“看”得又快又准&#xff1f;尤其是在边缘设备资源受限、云端推理成本敏感的背…

作者头像 李华