树莓派学习-I2c通信

树莓派学习-I2c通信前言由于之前参加了学校的飞兆杯的比赛,题目是循迹小车,由于缺乏对于ldc1314芯片使用知识以及个人的能力原因,项目并没有做出来,但是还是学习了很多东西的。其中以树莓派的I2C通信为最。一、I2C简介I2C(Inter-IntegratedCircuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊

大家好,又见面了,我是你们的朋友全栈君。

前言

由于之前参加了学校的飞兆杯的比赛,题目是循迹小车,由于缺乏对于ldc1314芯片使用知识以及个人的能力原因,项目并没有做出来,但是还是学习了很多东西的。

其中以树莓派的I2C通信为最。

一、I2C简介

I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。 I2C 总线支持任何IC 生产工艺(CMOS、双极型)。通过串行数据(SDA)线和串行时钟 (SCL)线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别(无论是微控制器——MCU、LCD 驱动器、存储器或键盘接口),而且都可以作为一个发送器或接收器(由器件的功能决定)。LCD 驱动器只能作为接收器,而存储器则既可以接收又可以发送数据。除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机(见表1)。主机是初始化总线的数据传输并产生允许传输的时钟信号的器件。此时,任何被寻址的器件都被认为是从机。

详见 百度百科-I2C总线

二、配置I2C接口,读取i2c设备的地址

1、可以通过raspi-config配置工具配置使能I2C,或者通过编辑/boot/config.txt文件,加入一下一行内容:

dtparam=i2c1=on
dtparam=i2c_arm=on

2、安装I2C库和工具

$sudo apt-get install i2c-tools

3、当连接上I2C设备后,可以通过以下命令查看

$sudo i2cdetect -y -a 1

树莓派学习-I2c通信

其中2a就是我们的ldc1314模块的i2c通信地址

三、对i2c设备寄存器的读写

1、设备所有数据的读出

sudo i2cdump -y 1 0x2a

-y 代表取消用户交互过程,直接执行命令

1 代表I2C设备号

0x2a 代表I2C设备地址

该命令会到处0x00到0xFF地址范围内的所有数据,如图所示
树莓派学习-I2c通信

2、数据的写入

使用
sudo i2cset -y 1 0x2a 0x1a 0x55
即可向设备地址为0x2a的0x1a寄存器地址写入0x55

-y 代表取消用户交互过程,直接执行命令

1 代表I2C设备号

0x2a 代表I2C设备地址

0x1a 代表寄存器地址

0x55 代表向寄存器写入的数据

3、寄存器数据读出

sudo i2cget -y 1 0x2a 0x1a

即可读出总线地址为0x2a设备的0x1a寄存器地址的数据

-y 代表取消用户交互过程,直接执行命令

1 代表I2C设备号

0x2a 代表I2C设备地址

0x1a 代表寄存器地址

4、对16位数据的读

在基本的命令后加上 w 即可实现

树莓派学习-I2c通信

四、I2C编程

因为使用树莓派我一直使用的语言是Python,故i2c编程只学到了Python

首先需要安装smbus库

sudo apt-get install python-smbus

示例代码如下

import smbus
import time
bus = smbus.SMBus(1)

addr=0x2a
recount_th0=0x1a
# 对8位数据的读写
data=bus.read_byte_data(address,recount_th0) 
print data

bus.write_byte_data(address,recount_th0,0x99)

#对16位数据的读写
data=bus.read_word_data(address,recount_th0) 
print data

bus.write_word_data(address,recount_th0,0x01d6)

注:bus = smbus.SMBus(1) 在树莓派版本2中,I2C设备位于/dev/I2C-1,所以此处的编号为1

python封装SMBUS操作函数具体代码请查看:https://github.com/bivab/smbus-cffi

五、速率相关

1、查看I2C设备的速率

sudo cat /sys/module/i2c_bcm2708/parameters/baudrate 

默认的I2C速度为100KHz,对于多数I2C设备而言100KHz并不算快,但是对于个别的I2C设备而言100KZH还是太快了,那么也可以修改I2C的速率使得通信更稳定。

2、修改速率 ##

进入/etc/modprobe.d 目录,并在该目录下新建一个costom.conf文件,在该文件中插入options i2c_bcm2708 baudrate=32000,32000便为新的I2C速率,最后请重启系统。

cd  /etc/modprobe.d           #进入/etc/modprobe.d 目录  
sudo nano custom.conf         #在该目录新建一个名为custom.conf文件,并插入以下内容  
                              #options i2c_bcm2708 baudrate=32000  
sudo reboot                   #重启系统  

六、参考资料

树莓派入门教程——I2C Tools的安装和使用

树莓派与i2c设备的通信

树莓派学习笔记——I2C设备装入和速率设置

树莓派系列教程11:I2C编程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143104.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 移动端触摸touchstart监听事件[通俗易懂]

    移动端触摸touchstart监听事件[通俗易懂]click、mousedown等事件适用于PC端,在移动端会有一定时间的延迟,所以更好的优化移动端体验,要用touch事件,1、首先要添加一个监听事件,监听移动端行为element.addEventListener(event,function,useCapture)我这里是针对浏览器行为,所以监听事件为//添加触摸监听事件,如果手指触摸到阴影…

    2022年6月19日
    72
  • springcloud原理详解_数据库底层实现原理

    springcloud原理详解_数据库底层实现原理天天喊着微服务,微服务的,微服务怎么牛逼,微服务有多强大,学好微服务三天不用吃饭的那种?那我心里不禁一紧微服务到底是个啥?往下看!总有东西有点帮助!先来个简单的介绍吧!SpringCloud框架针对这个架构图我分层介绍一下:1、是web服务器的选型,这个我选择的是nginx+keepalived,haproxy也是一个选择,但是haproxy在反向代理处理跨域访问的时候问题很多…

    2025年9月6日
    4
  • 多线程与多进程

    多线程与多进程

    2021年5月24日
    109
  • Linux学习-vmware虚拟机安装tomcat

    Linux学习-vmware虚拟机安装tomcat

    2022年2月24日
    144
  • 教你用JAVA写个小游戏[通俗易懂]

    教你用JAVA写个小游戏[通俗易懂]上周上课的时候老师让用Java写个小程序,我本想写一个经典的飞机大战游戏来着,可以后来突发奇想就写成了这个一、整体思路继承窗体类,复写窗体刷新 添加按键监听 游戏结束界面 王思聪类和热狗类移动轨迹计算 判断碰撞音乐播放 不断刷新窗体处理细节二、编码1.图片首先你要找到图片,可以百度一张,然后用ps切开,再找一张背景图片就搞定了你还需要一个加载图片的…

    2022年7月14日
    24
  • ipset常用命令

    ipset常用命令ipset设置安装#yuminstallipset创建ipset黑名单(黑名单名称为blacklist)#ipsetcreateblacklisthash:iptimeout259200hashsize4096maxelem1000000查看列表#ipsetlistblacklist向黑名单中添加IP/端口#ipsetaddbl…

    2022年10月7日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号