0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【Milk-V Duo开发板免费体验】评测三、I2C功能摸索

明祥军 来源:史逸如 作者:史逸如 2023-07-28 08:59 次阅读

评测三、I2C功能摸索

手册里说CV1800B有5个I2C控制器,分别如下:

wKgaomTCgTCAGAlDAAAzK7Az0yw931.png

正好手头有个BMP180,它的设备地址是0x77,于是修改设备树build/boards/cv180x/cv1800b_milkv_duo_sd/dts_riscv/cv1800b_milkv_duo_sd.dts使能I2C0:

&i2c0 {

status = "okay";

bmp180:bmp180@77 {

compatible = "bmp180";

reg = <0x77>;

};

};

同时修改build/boards/default/u-boot/ cv180x_qfn_cvi_board_init.c重映射I2C0功能为默认:

PINMUX_CONFIG(IIC0_SCL, IIC0_SCL);

PINMUX_CONFIG(IIC0_SDA, IIC0_SDA);

以及build/boards/cv180x/cv1800b_milkv_duo_sd/u-boot使能IIC0:

CONFIG_IIO=y

wKgZomTCgVqAJT-mAAJwLeSzcyE191.png

图1 dts修改

然后编译生成镜像文件,在Windows下编译不知道为什么老是报错linux5.10/build/cv1800b_milkv_duo_sd/sur/include:cannot overwrite directory

wKgaomTCga2ARlmCAAMkohtDnqs843.png

图2 Windows下编译老是报错

由于之前烧过,再烧录重新登陆会提示“Host key verification failed”,不慌按提示的在.ssh/known_hosts编辑删掉192.168.42.1那一行USB RNDIS即可:

wKgZomTCgcKAWswgAAHCaqEyaTM176.png

图3重烧SSH报错

进入后用这篇帖子https://community.milkv.io/t/milk-v-duo-cvi-pinmux/292提供的cvi_pinmux工具查看I2C0引脚设置:

wKgaomTCgdOAWbu1AACD9FvF9e8959.png

图4扫不到目标

明明设置的是0x77(BMP180传感器的从机地址为0xEE),可无中生有扫出0x56,上传bmp180驱动,代码如下:

#include

#include

#include

#include

#include

#include

#include

#include

#define I2C_RETRIES 0x0701

#define I2C_TIMEOUT 0x0702

#define I2C_RDWR 0x0707

/*********定义struct i2c_rdwr_ioctl_data和struct i2c_msg,要和内核一致*******/

struct i2c_msg

{

unsigned short addr;

unsigned short flags;

#define I2C_M_TEN 0x0010

#define I2C_M_RD 0x0001

unsigned short len;

unsigned char *buf;

};

struct i2c_rdwr_ioctl_data

{

struct i2c_msg *msgs;

int nmsgs;

/* nmsgs这个数量决定了有多少开始信号,对于“单开始时序”,取1*/

};

/***********主程序***********/

int main()

{

int i2c_file,ret;

struct i2c_rdwr_ioctl_data sensor_data;

i2c_file=open("/dev/i2c-0",O_RDWR);

/*

dev/i2c-0是在注册i2c-dev.c后产生的,代表一个可操作的适配器。如果不使用i2c-dev.c

*的方式,就没有,也不需要这个节点。

*/

if(i2c_file<0)

{

printf("open I2C device failed %dn", errno);

return -ENODEV;

}

sensor_data.nmsgs=2;

/*

*因为操作时序中,最多是用到2个开始信号(字节读操作中),所以此将

*sensor_data.nmsgs配置为2

*/

sensor_data.msgs=(struct i2c_msg*)malloc(sensor_data.nmsgs*sizeof(struct i2c_msg));

if(!sensor_data.msgs)

{

perror("malloc error");

exit(1);

}

ioctl(i2c_file,I2C_TIMEOUT,1);/*超时时间*/

ioctl(i2c_file,I2C_RETRIES,2);/*重复次数*/

/******read data from sensor*******/

sensor_data.nmsgs=2;

(sensor_data.msgs[0]).len=1; //sensor目标数据的地址

(sensor_data.msgs[0]).addr=0x77; // sensor设备地址

(sensor_data.msgs[0]).flags=0;//write

(sensor_data.msgs[0]).buf[0]=0xD0;//sensor数据地址

(sensor_data.msgs[1]).len=1;//读出的数据

(sensor_data.msgs[1]).addr=0x77;// sensor设备地址

(sensor_data.msgs[1]).flags=I2C_M_RD;//read

(sensor_data.msgs[1]).buf=(unsigned char*)malloc(1);//存放返回值的地址。

(sensor_data.msgs[1]).buf[0]=0;//初始化读缓冲

ret=ioctl(i2c_file,I2C_RDWR,(unsigned long)&sensor_data);

if(ret<0)

{

perror("ioctl error2");

}

printf("buff[0]=%xn",(sensor_data.msgs[1]).buf[0]);

close(i2c_file);

return 0;

}

依旧报错,暂时未调通。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15223

    浏览量

    171192
  • Linux
    +关注

    关注

    87

    文章

    10991

    浏览量

    206736
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1346

    浏览量

    120823
  • 开发板
    +关注

    关注

    25

    文章

    4429

    浏览量

    93996
  • RISC-V
    +关注

    关注

    41

    文章

    1901

    浏览量

    45045
收藏 人收藏

    评论

    相关推荐

    Milk-V Duo】1、入门篇

    入门milk-V Duo开发板
    的头像 发表于 07-07 11:21 1100次阅读
    【<b class='flag-5'>Milk-V</b> <b class='flag-5'>Duo</b>】1、入门篇

    Milk-V Duo开发板免费体验】Milk-V初次使用

    Milk-V Duo开发板免费体验】Milk-V初次使用
    的头像 发表于 08-08 09:03 1665次阅读
    【<b class='flag-5'>Milk-V</b> <b class='flag-5'>Duo</b><b class='flag-5'>开发板</b><b class='flag-5'>免费</b>体验】<b class='flag-5'>Milk-V</b>初次使用

    Milk-V Duo 开发板免费体验】 + 系统镜像烧录以及登录

    Milk-V Duo 开发板免费体验】+系统镜像烧录以及登录 一.Milk-V Duo
    发表于 07-11 11:43

    Milk-V Duo 开发板免费体验】Milk-V Duo之开箱初体验

    STM32103C8T6核心的体积能与之媲美了,但是前者在同样的体积下塞进去了更强的功能。 二,外设 Milk-V Duo是一个基于CV
    发表于 07-16 01:15

    Milk-V Duo 开发板免费体验】1.开箱体验

    感谢算能和电子发烧友论坛的开发板试用活动,有幸体验Milk-V Duo 开发板Milk-V Duo
    发表于 07-23 16:00

    Milk-V Duo 开发板免费体验】Milk-V Duo 开发板学习初体验

    milkv-duo-20230616-2232.img自制成linux启动盘 3、通过Type-C数据线连接电脑,小板系统顺畅的启动了 登录Milk-V Duo小板的系统耍耍吧 1、正
    发表于 07-28 15:58

    Milk-V Duo 开发板免费体验】开发板使用3

    接上文 【Milk-V Duo 开发板免费体验】开发板使用1 |和接上文 【Milk-V
    发表于 07-29 08:17

    Milk-V Duo 开发板免费体验】milkv-duo 申请成功体验

    任务处理。 对于创客和开发者来说,Milk-V Duo开发板可能是一个理想的选择。它提供了丰富的接口和功能,可以满足各种创意项目的需求。无论
    发表于 07-29 14:31

    Milk-V Duo 开发板免费体验】初步体验 + 搭建开发环境

    链接依赖过去即可了,后续可以直接修改文件系统去烧录。【Milk-V Duo 开发板免费体验】OpenCV的交叉编译 - RISC-V MCU
    发表于 08-01 12:49

    Milk-V Duo 开发板免费体验】Milk-V Duo 开发板初体验

    今天收到 ,打开快递的第一感觉就是非常精致小巧,一个黑色的小盒子及一块非常小巧但功能非常完善的开发板Milk-V Duo是一款基于算能 CV1800B芯片的MPU,能够运行基于LI
    发表于 08-18 00:26

    Milk-V Duo 开发板免费体验】3-Linux控制小车方向

    接上两篇:【Milk-V Duo 开发板免费体验】2控制螺旋桨电路https://bbs.elecfans.com/jishu_237105
    发表于 08-20 23:57

    Milk-V Duo 开发板免费体验】4-Linux控制小车动作(原创)首发

    接上篇: [接上两篇:【Milk-V Duo 开发板免费体验】3-Linux控制小车方向https://bbs.elecfans.com/
    发表于 08-21 02:11

    Milk-V Duo 开发板免费体验】初体验及开箱视频

    Duo为专业人士、工业OEM企业、物联网爱好者、业余爱好者、DIYers和创作者提供了一个可靠、低成本且极具功能的平台,使他们能够打造和调试自己的想法,并将其变成现实。 开发板盒子只有口香糖大小,
    发表于 08-22 23:59

    Milk-V Duo 开发板免费体验】1、开箱和烧录镜像

    的平台。 开发板规格 Milk-V Duo 规格 处理器 CVITEK CV1800B (C906@1Ghz + C906@700MHz)
    发表于 08-24 20:21

    Milk-V Duo 开发板免费体验】②、ssh连接Milk-V Duo开发板

    承接上期的开箱贴,此次将Milk-V Duo开发板运行linux系统。在此之前需要手头准备一张8GB以上的TF卡,并使用读卡器将TF烧录Linux镜像文件。这里需要借助烧写工具rufus,这款工具
    发表于 08-29 00:53