Implemented according to API docs in a parent comment. Adds new multi_extmod/machine_can_* tests which pass when testing between NUCLEO_G474RE, NUCLEO_H723ZG and PYBDV11. This work was mostly funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
# Test machine.CAN(1) and machine.CAN(2) using loopback
|
|
#
|
|
# Single device test, assumes support for loopback and no connections to the CAN pins
|
|
#
|
|
# This test is ported from tests/ports/stm32/pyb_can2.py
|
|
|
|
try:
|
|
from machine import CAN
|
|
|
|
CAN(2, 125_000)
|
|
except (ImportError, ValueError):
|
|
print("SKIP")
|
|
raise SystemExit
|
|
|
|
import time
|
|
|
|
# Setting up each CAN peripheral independently is deliberate here, to catch
|
|
# catch cases where initialising CAN2 breaks CAN1
|
|
|
|
can1 = CAN(1, 125_000, mode=CAN.MODE_LOOPBACK)
|
|
can1.set_filters([(0x100, 0x700, 0)])
|
|
|
|
can2 = CAN(2, 125_000, mode=CAN.MODE_LOOPBACK)
|
|
can2.set_filters([(0x000, 0x7F0, 0)])
|
|
|
|
# Drain any old messages in RX FIFOs
|
|
for can in (can1, can2):
|
|
while can.recv():
|
|
pass
|
|
|
|
for id, can in ((1, can1), (2, can2)):
|
|
print("testing", id)
|
|
# message1 should only receive on can1, message2 on can2
|
|
can.send(0x123, b"message1", 0)
|
|
can.send(0x003, "message2", 0)
|
|
time.sleep_ms(10)
|
|
did_recv = False
|
|
while res := can.recv():
|
|
did_recv = True
|
|
print(hex(res[0]), bytes(res[1]), res[2], res[3])
|
|
if not did_recv:
|
|
print("no rx!")
|
|
|
|
print("done")
|