CAN类 –控制器区域网络通信总线

CAN实施标准CAN通信协议。其物理层包括两道线:RX和TX。注意:将pyboard或OpenMV Cam与CAN总线连接时,您必须使用来CAN传输器将来自的CAN逻辑信号转换为总线上正确的电压等级。

构造函数

Class Methods

classmethod CAN.initfilterbanks(nr)

方法

CAN.init(mode, extframe=False, prescaler=100, *, sjw=1, bs1=6, bs2=8)

使用给定参数初始化CAN总线:

  • mode 为下列之一:NORMAL, LOOPBACK, SILENT, SILENT_LOOPBACK
  • extframe 为True,总线使用框架(29位)中的扩展标识符;否则使用标准的11位标识符。
  • prescaler 用于设置1时间量的持续时长;时间量为分配器分割的输入时钟(PCLK1,见 pyb.freq() )。
  • sjw 是以时间量计的同步跳转宽度;数值可为1、2、3、4。
  • bs1 以时间量为单位定义了样本点的位置;该数值介于1-1024间。
  • bs2 以时间量为单位定义了传输点的位置;该数值介于1-16间。

时间量(tq)是CAN总线的基本时间单位。Tq即CAN预分频器值除以PCLK1(内部外围总线1的频率);确定PCLK1,详见 pyb.freq()

一个位是由同步段组成的,通常即为1时间量。然后是位段1,位段2。样本点在位段1结束后。传输点在位段2结束后。波特率是二进时间,位时间即1 + BS1 + BS2与tq的乘积。

例:当PCLK1=42MHz,prescaler=100,sjw=1,bs1=6,bs2=8,tq值为2.38微秒。位时间为35.7微秒,波特率为28kHz。

CAN.deinit()

关闭CAN总线。

CAN.setfilter(bank, mode, fifo, params, *, rtr)

配置一个滤波器组:

  • bank 是将被配置的滤波器组。
  • mode 是滤波器运行的模式。
  • fifo 是fifo (0 or 1)信息储存的位置,前提是滤波器接受该信息。
  • params 是一组定义滤波器的值。该组值取决于mode参数。
  • rtr 是一组布尔数组,该数组规定过滤器是否应接受远程传输请求消息。若该参数未给出,则默认所有条目为False。这一数组的长度取决于 mode 参数。
CAN.clearfilter(bank)

清空并禁用一个滤波器组:

  • bank 是将被清空的滤波器组。
CAN.any(fifo)

若有消息在FIFO上等待,则返回 True ;若无,则返回 False

CAN.recv(fifo, *, timeout=5000)

在总线上接收数据:

  • fifo 是一个整数,FIFO即在此接收。
  • timeout 是以毫秒计的等待接收的超时时长。

返回值:包含4个值的元组

  • 消息的id。
  • 一个表明消息是否是RTR消息的布尔值。
  • FMI值(过滤器匹配指数)。
  • 一个包含数据的数组。.
CAN.send(data, id, *, timeout=0, rtr=False)

在总线上发送消息:

  • data 是发送的数据(发送一个整数或一个缓冲区对象)。
  • id 是所发送的消息的id。
  • timeout 是以毫秒计的等待发送的超时时长。
  • rtr 是一个指定消息是否应该作为远程传输请求发送的布尔值。若 rtr 为True ,则只使用 data 长度来填充框架的DLC插槽,

而不使用 data 中的实际字节。

若暂停时间为0,消息则置于三个硬件缓冲区中的其中一个,该方法立即返回。若三个缓冲区都被占用,则会引发异常。若暂停时间不为0,该方法会等待消息传输完毕。若该消息不能在指定时间内传输,则会引发异常。

返回值: None.

CAN.rxcallback(fifo, fun)

当空FIFO接收消息时,注册一个回调函数:

  • fifo 是接收的FIFO。
  • fun 是FIFO变为非空时要调用的函数。

回调函数有两个参数:一个是CAN对象本身,一个是表明回调原因的整数。

回调用法示例:

def cb0(bus, reason):
  print('cb0')
  if reason == 0:
      print('pending')
  if reason == 1:
      print('full')
  if reason == 2:
      print('overflow')

can = CAN(1, CAN.LOOPBACK)
can.rxcallback(0, cb0)

常量

CAN.NORMAL
CAN.LOOPBACK
CAN.SILENT
CAN.SILENT_LOOPBACK

CAN总线的模式

CAN.LIST16
CAN.MASK16
CAN.LIST32
CAN.MASK32

过滤器运行模式