CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 12750|回复: 11

经过几天的自己摸索终于整出了I2C协议了,纯C++

[复制链接]
发表于 2013-9-6 21:27:49 | 显示全部楼层 |阅读模式
本帖最后由 wyd1520 于 2013-9-6 21:31 编辑

先上个图,你们自己看。。。玩这个几千只草泥马,在心里狂奔。。
驱动这个把Arduino的LiquidCrystal_I2C进行了改进,当然自己实现了I2C的Wire库。。。调用了i2c-1驱动实现,现在CubieBoard的引脚扩展库(arduCB)实现了GPIO PWM (softPwm) Serial Wire(I2C) 都实玑了。就差SPI了,我刷的系统这个没有spidev0.0驱动,没法测SpiCB这个类,就不放代码了。

IMG_20130906_212448.jpg
回复

使用道具 举报

发表于 2013-9-7 09:56:26 | 显示全部楼层
功能强大,上个代码大家学习下!
回复 支持 反对

使用道具 举报

发表于 2013-9-7 18:58:47 | 显示全部楼层
楼主既然整出来了,何不shareing the fucking codes ? 因为这个程序应该不涉及到你的商业机密什么的,放出来,我们参考参考,学习学习,谢谢!
回复 支持 反对

使用道具 举报

发表于 2013-9-8 10:22:03 | 显示全部楼层
搞不懂。linux已经把i2c协议封装好了,直接操作/dev/i2c[0-?]就可以了,有那么麻烦吗?
回复 支持 反对

使用道具 举报

发表于 2013-9-9 21:00:42 | 显示全部楼层
matson 发表于 2013-9-8 10:22
搞不懂。linux已经把i2c协议封装好了,直接操作/dev/i2c[0-?]就可以了,有那么麻烦吗? ...

请问怎么操作,给个example
回复 支持 反对

使用道具 举报

发表于 2013-9-10 10:21:50 | 显示全部楼层
本帖最后由 matson 于 2013-9-10 10:35 编辑
寒寒 发表于 2013-9-9 21:00
请问怎么操作,给个example

下面是一个不用写代码直接i2c操作的例子

#i2cdetect 5

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- 3a -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 52 53 54 55 56 57 -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --                        

#i2cdump 5 0x50 b
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 00 ff ff ff ff ff ff 00 7f ff 09 03 01 01 01 01    ........?.??????
10: 17 16 01 03 80 46 27 96 0a 3c e0 a0 57 47 98 27    ?????F'??<??WG?'
20: 12 4c 4c 21 08 00 45 40 61 40 81 c0 81 00 01 01    ?LL!?.E@a@???.??
30: 01 01 01 01 01 01 30 2a 00 98 51 00 2a 40 30 70    ??????0*.?Q.*@0p
40: 13 00 55 00 54 00 00 1e 00 00 00 00 00 00 00 00    ?.U.T..?........
50: 00 00 00 00 00 00 00 00 00 18 00 00 00 fc 00 4c    .........?...?.L
60: 43 44 54 56 0a 20 20 20 20 20 20 20 00 00 00 fd    CDTV?       ...?
70: 00 38 3f 1e 50 0f 00 0a 20 20 20 20 20 20 01 80    .8??P?.?      ??
80: 02 03 23 71 4f 01 02 03 04 05 06 07 10 11 12 13    ??#qO???????????
90: 14 15 16 1f 23 09 07 07 83 01 00 00 66 03 0c 00    ????#?????..f??.
a0: 00 00 80 fa 1c 80 18 71 1c 16 20 58 2c 25 00 c4    ..?????q?? X,%.?
b0: 8e 21 00 00 9e 00 00 00 00 00 00 00 00 00 00 00    ?!..?...........
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7a    ...............z

#i2cget 5 0x50 0x10 b
0x17

#i2cset 这个要看设备地址是否可写,我就没有试了
这个是i2c-tools包带过来的几个基本命令。也可以下载到源码



回复 支持 反对

使用道具 举报

发表于 2013-9-10 16:56:24 | 显示全部楼层
matson 发表于 2013-9-10 10:21
下面是一个不用写代码直接i2c操作的例子

#i2cdetect 5

直接被秒杀了
回复 支持 反对

使用道具 举报

发表于 2013-9-11 06:06:29 | 显示全部楼层
void lcd1602_init(void) {
    char filename[40];
    const char *buffer;
    unsigned  addr = 0b00100111;        // The I2C address of the 1602 0x27     
    unsigned char out_byte=0;


    sprintf(filename,"/dev/i2c-1");
    if ((file = open(filename,O_RDWR)) < 0) {
        printf("Failed to open the bus.");
        /* ERROR HANDLING; you can check errno to see what went wrong */
        exit(1);
    }

    if (ioctl(file,I2C_SLAVE,addr) < 0) {
        printf("Failed to acquire bus access and/or talk to slave.\n");
        /* ERROR HANDLING; you can check errno to see what went wrong */
        exit(1);
    }

    out_byte=0x2c;
    write(file,&out_byte,1);
    out_byte=0x28;
    write(file,&out_byte,1);

    char buf[10] = {0};

    buf[0] |= ( LCD_FUNCTIONSET | LCD_4BITMODE | LCD_2LINE | LCD_5x8DOTS);
回复 支持 反对

使用道具 举报

发表于 2013-9-11 06:14:18 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2013-11-12 23:14:46 | 显示全部楼层
matson 发表于 2013-9-10 10:21
下面是一个不用写代码直接i2c操作的例子

#i2cdetect 5

求解 i2c设备接上去不用写设备驱动么? 实现probe 等等,
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-11-23 23:06 , Processed in 0.028440 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部