|
| 1 | +from machine import CAN |
| 2 | +import time |
| 3 | + |
| 4 | + |
| 5 | +def send_and_check(can_bus, name, id, expected_result=True, extended=False): |
| 6 | + can_bus.clear_tx_queue() |
| 7 | + can_bus.clear_rx_queue() |
| 8 | + can_bus.send([], id, extframe=extended) |
| 9 | + time.sleep_ms(100) |
| 10 | + if can_bus.any() == expected_result: |
| 11 | + print("{}: OK".format(name)) |
| 12 | + if expected_result: |
| 13 | + can_bus.recv() |
| 14 | + else: |
| 15 | + print("{}: FAILED".format(name)) |
| 16 | + |
| 17 | + |
| 18 | +# 4 and 5 pins must be connected to each other, see documentation |
| 19 | +dev = CAN( |
| 20 | + 0, extframe=False, tx=5, rx=4, mode=CAN.SILENT_LOOPBACK, baudrate=50000, auto_restart=False |
| 21 | +) |
| 22 | + |
| 23 | +# Test send/receive message |
| 24 | +print("Loopback Test: no filter - STD") |
| 25 | +send_and_check(dev, "No filter", 0x100, True) |
| 26 | + |
| 27 | +# Set filter1 |
| 28 | +print("Loopback Test: one filter - STD") |
| 29 | +dev.setfilter(0, CAN.FILTER_ADDRESS, [0x101, 0]) |
| 30 | +send_and_check(dev, "Passing Message", 0x101, True) |
| 31 | +send_and_check(dev, "Blocked Message", 0x100, False) |
| 32 | + |
| 33 | +# Set filter2 |
| 34 | +print("Loopback Test: second filter - STD") |
| 35 | +dev.setfilter(0, CAN.FILTER_ADDRESS, [0x102, 0]) |
| 36 | +send_and_check(dev, "Passing Message - Bank 1", 0x102, True) |
| 37 | +send_and_check(dev, "Passing Message - Bank 0", 0x101, True) |
| 38 | +send_and_check(dev, "Blocked Message", 0x100, False) |
| 39 | + |
| 40 | +# Remove filter |
| 41 | +print("Loopback Test: clear filter - STD") |
| 42 | +dev.clearfilter() |
| 43 | +send_and_check(dev, "Passing Message - Bank 1", 0x102, True) |
| 44 | +send_and_check(dev, "Passing Message - Bank 0", 0x101, True) |
| 45 | +send_and_check(dev, "Passing any Message", 0x100, True) |
| 46 | + |
| 47 | +# Extended message tests |
| 48 | +# Move to Extended |
| 49 | +dev = CAN( |
| 50 | + 0, |
| 51 | + extframe=True, |
| 52 | + mode=CAN.SILENT_LOOPBACK, |
| 53 | + baudrate=CAN.BAUDRATE_500k, |
| 54 | + tx_io=18, |
| 55 | + rx_io=19, |
| 56 | + auto_restart=False, |
| 57 | +) |
| 58 | + |
| 59 | +# Test send/receive message |
| 60 | +print("Loopback Test: no filter - Extd") |
| 61 | +send_and_check(dev, "No filter", 0x100, True, extended=True) |
| 62 | + |
| 63 | +# Set filter1 |
| 64 | +print("Loopback Test: one filter - Extd") |
| 65 | +dev.setfilter(0, CAN.FILTER_ADDRESS, [0x101, 0], extframe=True) |
| 66 | +send_and_check(dev, "Passing Message", 0x101, True, extended=True) |
| 67 | +send_and_check(dev, "Blocked Message", 0x100, False, extended=True) |
| 68 | + |
| 69 | +# Remove filter |
| 70 | +print("Loopback Test: clear filter - Extd") |
| 71 | +dev.clearfilter() |
| 72 | +send_and_check(dev, "Passing Message - Bank 0", 0x101, True, extended=True) |
| 73 | +send_and_check(dev, "Passing any Message", 0x100, True, extended=True) |
0 commit comments