news 2026/2/4 0:40:05

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/1/31 17:55:22

Qwen3-VL-8B与OCR结合实现智能图文理解

Qwen3-VL-8B与OCR结合实现智能图文理解 你有没有遇到过这样的尴尬时刻&#xff1a;客户发来一张模糊的收据截图&#xff0c;问“这笔报销能通过吗&#xff1f;”——你盯着图看了半天&#xff0c;字是认出来了&#xff0c;但根本分不清哪行是金额、哪行是日期&#xff0c;更别…

作者头像 李华
网站建设 2026/1/31 18:10:22

Wan2.2-T2V-A14B本地部署:从环境配置到多GPU推理

Wan2.2-T2V-A14B本地部署&#xff1a;从环境配置到多GPU推理 在生成式AI的浪潮中&#xff0c;文本生成视频&#xff08;T2V&#xff09;正迅速从实验室走向实际创作场景。无论是影视预演、广告创意&#xff0c;还是教育动画和游戏开发&#xff0c;高质量、高一致性的动态内容生…

作者头像 李华
网站建设 2026/1/29 21:20:33

Kotaemon:开源RAG框架的混合检索突破

Kotaemon&#xff1a;当开源RAG遇上混合检索的工程突破 在智能客服、企业知识库和数字员工逐渐成为标配的今天&#xff0c;大模型的应用早已不再局限于“写诗画画”。真正考验技术深度的&#xff0c;是它能否准确回答“上季度华东区的订单履约率是多少”这种问题——既不能编造…

作者头像 李华
网站建设 2026/1/30 4:36:21

GPU算力平台部署Linly-Talker数字人教程

GPU算力平台部署Linly-Talker数字人教程 在短视频与直播内容爆炸式增长的今天&#xff0c;企业对高效、低成本的内容生产工具需求愈发迫切。一个能24小时在线讲解产品、回答用户问题的“虚拟员工”&#xff0c;早已不再是科幻电影中的设想——借助AI技术&#xff0c;这样的场景…

作者头像 李华
网站建设 2026/2/3 15:29:47

全球USB设备厂商ID与产品型号大全

Wan2.2-T2V-5B 模型技术参数数据库 Text-to-Video Model Database Maintained by the Open AI Initiative t2v.modelsopenai.org If you have any new entries, please submit them via https://www.openai.org/submit-t2v-model or send patches (diff -u old new) in plai…

作者头像 李华
网站建设 2026/2/3 11:21:40

Qwen3-14B如何避免输出截断?关键在max_new_tokens设置

Qwen3-14B 如何避免输出截断&#xff1f;关键在 max_new_tokens 设置 你有没有遇到过这种场景&#xff1a;用户上传了一份两万字的项目需求文档&#xff0c;要求生成一份详尽的技术方案。Qwen3-14B 读得认真、分析到位&#xff0c;结果最后却戛然而止——“综上所述&#xff0c…

作者头像 李华