硬件常见接口

博客介绍了I2C、串口和CAN口的通信知识。I2C通过两根线连接多设备,有通信协议和仲裁机制;串口有不同电平标准,在Linux下使用需设置权限和参数;CAN口是串行通信协议,有仲裁机制和多种报文类型,在Linux系统中作为网络设备管理,有通用开发接口。

I2C——集成电路总线

基本概念

  1. 通过两根线SDA,SCL线和很多设备连接,通过一个从机地址寻找设备 ,发送一个寻址字节来寻找,包含地址位和读写位,从机设备收到后,返回应答信号,这样主从机就可以连接成功。
  2. 具体的通信协议需要看对应设备的时序图,SCL是时钟信号,SCL从低到高的瞬间会对SDA进行采样,获取数据,所以SDA在SCL变化之前就需要保持好要发送的电平。
  3. 主从设备之间以8位为单位进行双向数据传输。
  4. 总线上可以多个主机,多个从机,同一个时刻只能有一个主机,如果有多个主机同时需要通信,就需要冲突检测和仲裁,防止数据混乱。
  5. 仲裁就是主机发一个1出去,再比较总线上电平,如果是1说明仲裁赢了,可以继续发数据,如果为0,说明仲裁输了,不能再发数据了。
  6. I2C标准100kbit/s,快速400kbit/s,告诉3.4Mbit/s,总线上设备数量受限于电容,可以通过增加总线驱动器增加设备数量。
  7. 空闲时间:SDA和SCL都高,
  8. 起始条件:SDA由高变低时候就是起始
  9. 终止条件:SDA由低到高时候就是终止
  10. 传输结束,从设备拉低SDA,返回应答信号
  11. 一对设备通信时候,其他无法使用,传输结束后再次空闲
  12. 每传输完一字节之后,都需要一个响应信号,分为两种,一种叫应答(低电平),非应答(高电平)
  13. I2C:双向、双线、半双工、串行、同步、近距离
  14. 电平3.3v为1,0v为0,还有高阻态为空闲

串口

基本概念

  1. TTL电平(0 ~ 5)、232电平(-15 ~ 15)、USB转TTL
  2. 异步串行,全双工
  3. 232芯片:max232, usb转ttl芯片:ch340,ft232、cp2102
  4. 通常配置0位校验,8位数据,1位停止
  5. 波特率,每秒钟发送的数据位数

linux下串口

  1. linux的设备都是抽象成文件,设备位于/dev下面,ttys0,ttys1
  2. 用之前需要给权限
  3. 用的时候,先开串口,获得文件描述符
  4. 然后设置参数
  5. 然后读写

CAN口(controler area network)

基本概念

  1. CAN总线上电平称为隐形和显性:
    CAN_H = 2.5v, CAN_L = 2.5v,差值为0,隐形电平 ,代表逻辑1
    CAN_H = 3.5v, CAN_L = 1.5v,差值为2,显形电平,代表逻辑0

  2. 它是串行数据通信协议,继承了物理层和数据链路层

  3. 有多个设备时,需要仲裁机制,采用载波监听多路访问,报文标识符逐位仲裁

  4. 国际标准:ISO11898(高速),ISO11519(低速)

  5. 特点:多主,不分主从;区分优先级,通过非破坏位仲裁机制;可以点对点、一对多,广播;节点数可到110个;段帧,一帧8个有效字节,每帧都校验, 严重错误下可自动关闭总线

  6. can报文:
    (1)数据帧 发送数据
    (2)远程帧 向其他节点请求发送同一标识符(ID)的数据帧
    (3)错误帧 指明已检测到总线错误
    (4)超载帧 在数据帧(或远程帧)之间

linux下can

  1. 在 Linux 系统中, CAN 总线接口设备作为网络设备被系统进行统一管理,可以通过ifconfig看到can的信息
  2. 可以通过IP命令来配置can速率
ip link set can0 type cantq 125 prop-seg 6phase-seg1 7 phase-seg2 2 sjw 1
  1. 查询can参数:
ip -details link show can0
  1. 使能和关闭can:
ifconfig can0 up 或 ip link set up can0
ifconfig can0 down 或 ip link set can0 down
  1. 显示can数据:
candump can0
  1. Linux 提供了SocketCAN 接口,使得 CAN 总线通信近似于和以太网的通信,应用程序开发接口 更加通用, 也更加灵活。
  2. 使用步骤:
    (1)创建socketCAN套接字,绑定
    (2)数据通信都是用结构体
    struct can_frame {
    canid_t can_id;//CAN 标识符
    __u8 can_dlc;//数据场的长度
    __u8 data[8];//数据
    };
    

(3)都是面对文件描述符进行操作了,可以用read和write,也可以用socket的send和recv

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值