完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
I2C之所以称为理论尝试,是因为一开始准备拿linkit 7687做I2C从机,结果I2C主机在Linux上的驱动源码看完才发现7687不支持I2C从机(也许可以自己编),所以后面简单的提下。 UART串口前面已经有人做过C语言版的了,这里提供一个bash命令形式的。
首先明确,/dev下面,tty是虚拟终端,ttyS是串口,系统默认连接的是ttyS0来作为debug端口。板子上引出的接口中好像还有两个uart,可以通过命令dmesg | grep tty(系统内核信息管道输出给grep命令来查看tty相关信息)。选择uart1也就是ttyS1这个设备。 首先配置该串口:stty -F /dev/ttyS0 9600 parodd,-F后面附加对应设备(Linux下每一个设备都是一个文件),波特率需要配置,校验位可以默认不设。 写串口:echo "command" > /dev/ttyS1 读串口:cat /dev/ttyUSB0 > file.txt;看效果默认是把数据回传了,并且该命令启动之后会一直在读串口。
关于I2C:下面简单分析一下I2C主机程序。 #include #include #include #include #include #include #include #include #define I2C_DEV "/dev/i2c-0" //在dev下存在两个I2C static int iic_read(int fd, char buff[], int addr, int count) { int res; char sendbuffer1[2]; sendbuffer1[0]=addr>>8; sendbuffer1[1]=addr; write(fd,sendbuffer1,2); res=read(fd,buff,count); printf("read %d byte at 0x%x/n", res, addr); return res; } static int iic_write(int fd, char buff[], int addr, int count) { int res; int i,n; static char sendbuffer[100]; memcpy(sendbuffer+2, buff, count); sendbuffer[0]=addr>>8; sendbuffer[1]=addr; res=write(fd,sendbuffer,count+2); printf("write %d byte at 0x%x/n", res, addr); } int main(void) { int fd; int res; //res前期用来存储函数运行状态,后期用来存储读取结果 char ch; char buf[50]; int regaddr,i,slaveaddr; fd = open(I2C_DEV, O_RDWR);// open函数打开一个设备文件并用fd作为句柄; if(fd < 0) { printf("####i2c test device open failed####/n"); return (-1); } printf("please input slave addr:"); scanf("%x",&slaveaddr); printf("input slave addr is:%x/n",slaveaddr); printf("please input reg addr:"); scanf("%x",&addr); printf("input reg addr is:%x/n",regaddr); res = ioctl(fd,I2C_TENBIT,0); res = ioctl(fd,I2C_SLAVE,slaveaddr); while((ch=getchar())!='0') { switch(ch) { case '1': printf("getch test success/n"); break; case '2': buf[0]=0xFF; buf[1]=0xFF; buf[2]=0xFF; buf[3]=0xFF; buf[4]=0xFF; printf("read i2c test/n"); res=iic_read(fd,buf,regaddr,5); printf("%d bytes read:",res); for(i=0; i } printf("/n"); break; case '3': buf[0]=0xAA; buf[1]=0x55; buf[2]=0xAA; printf("write i2c test/n"); res=iic_write(fd,buf,regaddr,2); printf("%d bytes write success/n",res); break; default: printf("bad command/n"); break; } } return 0; } 这个程序可以用来Linux下的I2C主机程序,gcc编译通过。首先是open函数打开设备并配置读写权限,然后是iotcl函数设置从机地址,注意从机地址是write函数默认在前面发送的,在i2c_write函数中发送的地址是所谓寄存器地址,如果有i2c从机,从机收到的regaddr和有效数据的形式是一样的。 i2c默认传输8位字节加应答位,write和read函数均为头文件所定义的函数,返回值为字节个数。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
383个成员聚集在这个小组
加入小组NanoPi m3适合刷什么系统,刚接触玩,我刷了一个比较卡
5961 浏览 1 评论
7747 浏览 1 评论
5107 浏览 1 评论
【NanoPC-T4试用体验】4、手把手教你从单片机移植驱动到ARM Linux上
8663 浏览 1 评论
【NanoPC-T4试用体验】NanoPC-T4控制步进电机
25174 浏览 1 评论
NanoPi m3适合刷什么系统,刚接触玩,我刷了一个比较卡
5962浏览 1评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 21:07 , Processed in 0.443327 second(s), Total 35, Slave 27 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2981