Проект шилда для Raspberry Pi 4, включающего в себя блок DC-DC преобразователя на 5 В 3,5 А для питания Pi4, контроллер и драйвер шины CAN и адаптер для радиомодуля nRF24L01. Также этот шилд может использоваться с предыдущими версиями Raspberry Pi. Питание с внешнего источника подается в шину CAN на 3 из 4 пар FTP-кабеля для питания ведомых устройств.
Данный шилд был разработан для подключения к "Малине" как устройств, использующих CAN-шину, так и беспроводных датчиков. Одновременно он выполняет функцию блока питания для самой "Малины".
Железо
Схема шилда показана на рисунке: (кликнуть для увеличения)
Блок питания состоит из DC-DC преобразователя U1 с 48 до 5 вольт с выходным током до 3.5 А для питания Raspberry Pi и драйвера шины CAN U4, а также регулятора на 3.3 вольта для питания контроллера шины CAN U3 и радиомодуля U2.
Шилд собран на плате стандартных размеров для шилдов Малины:
Рендер платы:
Софт
CAN-шина
1. Для начала нужно включить SPI в raspi-config.
Затем в /boot/config.txt включить spi, mpc2515 & bcm2835-spi overlays, включить интерфейс spi (раскомментировать строку dtparam=spi=on), и добавить следующие строки:
dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=12
dtoverlay=spi-bcm2835-overlay
2. Установить CAN tools:
pi@piv2:~ $ sudo apt-get install can-utils
3. Перезагрузиться
4. Проверяем, доступен ли интерфейс. Как видно в листинге ниже, у нас net\can0 dir в spi0.0 так что все должно работать нормально:
pi@piv2:~ $ ls /sys/bus/spi/devices/spi0.0
driver modalias net of_node subsystem uevent
pi@piv2:~ $ ls /sys/bus/spi/devices/spi0.0/net
can0
pi@piv2:~ $ ls /sys/bus/spi/devices/spi0.0
driver modalias net of_node subsystem uevent
pi@piv2:~ $ ls /sys/bus/spi/devices/spi0.0/net/
can0
pi@piv2:~ $ ls /sys/bus/spi/devices/spi0.0/net/can0/
addr_assign_type carrier_changes duplex iflink operstate speed uevent
address device flags link_mode phys_port_id statistics
addr_len dev_id gro_flush_timeout mtu phys_port_name subsystem
broadcast dev_port ifalias name_assign_type phys_switch_id tx_queue_len
carrier dormant ifindex netdev_group queues type
5. Настраиваем скорость CAN на 125 кбит/с:
pi@piv2:~ $ sudo ip link set can0 up type can bitrate 125000
Пример
pi@piv2:~ $ sudo ifconfig
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING NOARP MTU:16 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
eth0 Link encap:Ethernet HWaddr b8:hh:jb:3z:bp:30
inet addr:192.168.9.256 Bcast:192.168.1.299 Mask:266.277.288.0
inet6 addr: fe80::3h3g:bn1j:7bvv:fzx1/264 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:368 errors:0 dropped:0 overruns:0 frame:0
TX packets:235 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:36086 (35.2 KiB) TX bytes:34411 (33.6 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:200 errors:0 dropped:0 overruns:0 frame:0
TX packets:200 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:16656 (16.2 KiB) TX bytes:16656 (16.2 KiB)
6. Пробуем отправить что-нибудь
pi@piv2:~ $ cansend can0 456#43414e2054657374
7. Получаем данные с шины:
pi@piv2:~ $ candump can0
can0 001 [8] 11 22 33 44 55 66 77 88
can0 00003456 [8] EF FE DD AD CB 67 98 AA
can0 00000FE6 [8] EF FE DD AD CB 67 98 AA
can0 0CC [8] EF FE DD AD CB 67 98 AA
can0 0CC [8] EF FE DD AD CB 67 98 AA
^Cpi@piv2:~
8. Автоматическая конфигруация при загрузке
auto can0
iface can0 can static
bitrate 125000
Радиомодуль nRF24L01
Данный шилд можно использовать со специальной библиотеrой для nRF24. Библиотека RF24 универсальная, её можно установить и использовать как на Arduino, так и на устройства под ОС Linux (Raspberry Pi, Orange Pi, Banana Pi и т.п) поддерживающие SPIDEV, MRAA, RPi BCM2835 или LittleWire. Опция SPIDEV должна работать с большинством систем Linux, поддерживающих SPI.
Описание методов работы с библиотекой вы можете найти здесь: http://tmrh20.github.io/RF24/index.html