I have setup with MCP2515 with Coral mini board and using the adafruit_mcp2515 python package:
Code: Select all
import board
import busio
from adafruit_mcp2515 import MCP2515 as CAN
from adafruit_mcp2515.canio import Message, RemoteTransmissionRequest
from digitalio import DigitalInOut
cs = DigitalInOut(board.GPIO_P37)
cs.switch_to_output()
spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
while not spi.try_lock():
pass
spi.configure(baudrate=10000000)
spi.unlock()
can_bus = CAN(spi, cs, baudrate==250000)
while True:
with can_bus.listen(timeout=1.0) as listener:
message = Message(id=0x0712, data=bytes([0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0]), extended=False)
send_success = can_bus.send(message)
print("Send success:", send_success)
message_count = listener.in_waiting()
#if message_count == 0:
# continue
print(message_count, "messages available")
for _i in range(message_count):
msg = listener.receive()
print("Message from ", hex(msg.id), "extended:", msg.extended)
if isinstance(msg, Message):
message_str = ",".join(["0x{:02x}".format(i) for i in msg.data])
print("message data", end=":")
print(message_str)
if isinstance(msg, RemoteTransmissionRequest):
print("RTR length:", msg.length)
it can run for awhile then return the Error :
Code: Select all
message_count = listener.in_waiting()
File "/usr/local/lib/python3.7/dist-packages/adafruit_mcp2515/canio/__init__.py", line 113, in in_waiting
return self._can_bus_obj.unread_message_count
File "/usr/local/lib/python3.7/dist-packages/adafruit_mcp2515/__init__.py", line 353, in unread_message_count
self._read_from_rx_buffers()
File "/usr/local/lib/python3.7/dist-packages/adafruit_mcp2515/__init__.py", line 413, in _read_from_rx_buffers
status = self._read_status()
File "/usr/local/lib/python3.7/dist-packages/adafruit_mcp2515/__init__.py", line 676, in _read_status
spi.readinto(self._buffer, start=0, end=1)
File "/usr/local/lib/python3.7/dist-packages/busio.py", line 375, in readinto
return self._spi.readinto(buf, start, end, write_value=write_value)
File "/usr/local/lib/python3.7/dist-packages/adafruit_blinka/microcontroller/generic_linux/spi.py", line 105, in readinto
data = self._spi.transfer([write_value] * (end - start))
File "/usr/local/lib/python3.7/dist-packages/Adafruit_PureIO/spi.py", line 420, in transfer
ioctl(self.handle, SPI._IOC_MESSAGE, spi_ioc_transfer)
TimeoutError: [Errno 110] Connection timed out
Thanks!