鱼C论坛

 找回密码
 立即注册
查看: 2801|回复: 14

Linux 下测试 I2C 通讯

[复制链接]
发表于 2022-10-18 09:55:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 怪兽同学 于 2022-10-18 10:01 编辑

输入:
root@firefly:/usr/local# gcc test.c -o i2c-test
root@firefly:/usr/local# ./i2c-test 107 /dev/i2c-1 1

预计输出:
Device addr: 0x6b
Device name: /dev/i2c-1
Bit select: 10 bit

Received data: 0x69 0x00 0x00 0x04 0x00 0x00 0x00 0x00
End

实际输出:
Device addr: 0x6b
Device name: /dev/i2c-1
Bit select: 10 bit
####i2c test device open failed####

问题:
fd_open失败,在/usr/local路径下未找到/dev文件夹,不知道该如何运行此代码,求大神指教
//fd = open(argv[2], O_RDWR);// I2C_DEV /dev/i2c-0

原文地址:blog.chinaunix.net/uid-15732309-id-5818382.html
代码如下:
#include <stdio.h>

2.#include <fcntl.h>

3.#include <unistd.h>

4.#include <stdlib.h>

5.#include <sys/types.h>

6.#include <sys/ioctl.h>

7.#include <linux/i2c.h>

8.#include <linux/i2c-dev.h>

9.

10.

11.#define I2C_DEV "/dev/i2c-1"

12.#define CHIP_ADDR 0xD6

13.

14.

15. int main(int argc, char *argv[])

16. {

17.    int i = 0, fd = -1;

18.    int bits = 0;

19.    int chipAddr = 0xd6;

20.    unsigned char buf[1]={0x0f};

21.    unsigned char recbuf[8];

22.

23.

24.    if(argc <= 1)

25.    {

26.        printf("Usage: i2ctest device_addr device_name bitsel \n");

27.        return -1;

28.    }

29.

30.

31.    chipAddr = atoi(argv[1]);

32.    printf("Device addr: 0x%x \n", chipAddr);

33.

34.

35.    printf("Device name: %s \n", argv[2]);

36.

37.

38.    bits = atoi(argv[3]);

39.    if(bits == 0 || bits == 1)

40.        printf("Bit select: %s \n", bits == 0? "7 bit": "10 bit" );

41.    else

42.    {

43.        printf("bits error \n");

44.        return -1;

45.    }

46.

47.    fd = open(argv[2], O_RDWR);// I2C_DEV /dev/i2c-0

48.    if(fd < 0)

49.    {

50.        printf("####i2c test device open failed####\n");

51.        return -1;

52.    }

53.

54.

55.    // I2C_TENBIT:对应的arg取值为0:从机地址为7 bit;对应的arg取值为1:从机地址为10bit

56.    ioctl(fd, I2C_TENBIT, bits); //not 10bit

57.    ioctl(fd, I2C_SLAVE, chipAddr); //设置I2C从设备地址[6:0]

58.

59.

60.    write(fd,buf,1); /* 发送子地址0 */

61.    usleep(200000);

62.    read(fd, recbuf, 8);

63.

64.

65.    printf("\nReceived data: ");

66.    for(i = 0; i < 8; i++)

67.    {

68.        printf("0x%02x ", recbuf[i]);

69.    }

70.    printf("\nEnd \n");

71.    return 0;

72. }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-18 11:05:17 | 显示全部楼层
本帖最后由 两手空空儿 于 2022-10-18 11:07 编辑

BBS有非常好的发代码的方式,楼主可以试试,你这个格式实在是。。。。。
你还加了行号,别人复制过来都没法用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-18 12:27:18 | 显示全部楼层
看看/dev 底下是不是有/dev/i2c-1这个设备,我试了下如果输入一个不存在的设备就和你的错误一样了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-18 12:28:41 | 显示全部楼层
两手空空儿 发表于 2022-10-18 11:05
BBS有非常好的发代码的方式,楼主可以试试,你这个格式实在是。。。。。
你还加了行号,别人复制过来都没 ...

好的谢谢,我放了原文链接,你可以看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-18 12:29:30 | 显示全部楼层
kishere 发表于 2022-10-18 12:27
看看/dev 底下是不是有/dev/i2c-1这个设备,我试了下如果输入一个不存在的设备就和你的错误一样了

问题是我没有在/usr/local下找到/dev这个路径
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-18 12:31:05 | 显示全部楼层
根目录下的dev,/dev是绝对路径不是相对路径
./才是相对路径
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-18 12:35:23 | 显示全部楼层
怪兽同学 发表于 2022-10-18 12:29
问题是我没有在/usr/local下找到/dev这个路径

微信截图_20221018123356.png
看这里/dev下的设备有没有你输入的设备名称
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-19 08:16:22 | 显示全部楼层
kishere 发表于 2022-10-18 12:35
看这里/dev下的设备有没有你输入的设备名称

没有找到,这个I2C不是默认Linux系统就有的吗,还是说需要安装才可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-20 17:06:57 | 显示全部楼层
怪兽同学 发表于 2022-10-19 08:16
没有找到,这个I2C不是默认Linux系统就有的吗,还是说需要安装才可以

你是用的嵌入式开发板还是啥?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-20 23:21:25 | 显示全部楼层
还不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-21 09:52:29 | 显示全部楼层
kishere 发表于 2022-10-20 17:06
你是用的嵌入式开发板还是啥?

我就用了一个服务器,插了一个CPU,俩memory,一个m.2装了Linux系统
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-21 10:33:49 | 显示全部楼层
怪兽同学 发表于 2022-10-21 09:52
我就用了一个服务器,插了一个CPU,俩memory,一个m.2装了Linux系统

一般嵌入式开发板硬件官方都会自己带I2C驱动,你这自己装的怕是只能自己写驱动程序了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-21 13:01:28 | 显示全部楼层
kishere 发表于 2022-10-21 10:33
一般嵌入式开发板硬件官方都会自己带I2C驱动,你这自己装的怕是只能自己写驱动程序了。。。

好吧,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-21 13:03:29 | 显示全部楼层
kishere 发表于 2022-10-21 10:33
一般嵌入式开发板硬件官方都会自己带I2C驱动,你这自己装的怕是只能自己写驱动程序了。。。

再请教您一个问题,请问python代码怎么实现在windows、Linux系统上查询系统一共有可支持多少个CPU及Memory插槽,以及目前已经插了几个CPU,几根Memory,分别是哪几根(或者是在哪个插槽插的)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-21 19:16:16 | 显示全部楼层
怪兽同学 发表于 2022-10-21 13:03
再请教您一个问题,请问python代码怎么实现在windows、Linux系统上查询系统一共有可支持多少个CPU及Memor ...

查插槽这我是真不知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-20 13:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表