Всем привет Имеется малина и такая плата: https://www.waveshare.com/rs485-can-hat.htm Плата смотрит в сторону малины по SPI. Собственно, вопрос - SPI на малине (на линуксе) надо как-то настраивать ? Собрал на двух ардуинах и на mcp2515 CAN-соединение - всё бегает, отправляется/принимается. Отправляю с ардуино+мср2515 на CAN-HAT+малина: малина ничего не принимает, и не видит. Статистика по can0 - пустая. Как настраивать spi-модули на малине ?) В config.txt spi активировал dt..=spi=on У кого-то есть рабочая конфигурация малины с CAN ( mcp2515 ) ?
Прописать - это установить или активировать в конфигурационном файле ?) Дрова есть, модули подгружены. Сами файла tbo тоже физически присутствуют. Где-то затык в прослойке с SPI, если я правильно понял. Даже если я отсылаю cansend'ом пакетики из самой малины - в статистике Can0 малины пусто. То есть, до кана пакеты не доходят. И не приходят.
почему-то у меня отображается только один SPI - spi0.0 хотя у меня rpi3b (где по описанию должно вроде 2 spi) что такое ЛА ?
скорее всего, дело софтовое, не аппаратное. потому что, даже если я генерирую трафик cangen'ом - в can0 нет пакетов, до кана не доходит. предполагаю, что затык где-то в связке linux-spi или spi-can
1. /etc/modprobe.d/raspi-blacklist.conf этот файл у меня вообще пустой 2. ls /dev говорит что есть устройство spidev0.1 по идее, должно быть еще и spidev0.0. но, почему-то, spidev0.0 нет.. 3. SPI, в общем-то, работает. делал как написано, например, здесь: https://github.com/rm-hull/spidev-test скомпилил spidev_test и проверил, на устройство /dev/spidev0.1 тест нормально проходит (при размыкании - по нулям, при замыкании (т.е. при создании связи) - инфа проходит). причина - в интерфейсе can. или в параметрах создания can0, что ли.. инфа между spi и can0 не ходит! can создаю на примере отсюда: https://elinux.org/Bringing_CAN_interface_up (раздел Native Interfaces) #ip link set can0 type can bitrate 500000 (500000 потому что подключенная к малине вторая плата - на ардуино, зашитая на 500кгц) #ip link set up can0 ifconfig can0 - Выдает стандартный вывод состояния, как на примерах. но пакетов нет. шлю cansend'ом пакеты в can0 и смотрю ifconfig can0 - пакеты по нулям: инфа в кан не уходит. в устройствах не должно создаваться can0 ? lsmod | grep -i spi выдает spidev spi_bcm2835 ls -l /dev/spi* выдает /dev/spidev0.1
Какие дрова и что подгружено? Сам MCP2515 в DT прописали? Код (Text): Name: mcp2515-can0 Info: Configures the MCP2515 CAN controller on spi0.0 Load: dtoverlay=mcp2515-can0,<param>=<val> Params: oscillator Clock frequency for the CAN controller (Hz) spimaxfrequency Maximum SPI frequence (Hz) interrupt GPIO for interrupt signal Name: mcp2515-can1 Info: Configures the MCP2515 CAN controller on spi0.1 Load: dtoverlay=mcp2515-can1,<param>=<val> Params: oscillator Clock frequency for the CAN controller (Hz) spimaxfrequency Maximum SPI frequence (Hz) interrupt GPIO for interrupt signal
попробовал по той же ссылке создать виртуальный vcan0 интерфейс. засылаю cansend'ом в vcan0 пакеты - они там появляются! что-то не так с каном. не нужна там какая-нибудь библиотека ?
да, значения прописаны (я думал привел ссчылку) вот инфа: https://www.waveshare.com/wiki/RS485_CAN_HAT в /boot/config.txt прописано: dtparam=spi=on dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000 dtoverlay=spi0-cs //прописал еще и это, потом закоментировал - ничего не изменилось
12МГц. аппаратная часть в норме. пишу же - что-то с каном не так, с софтовой_частью/или с операционкой) либо с библиотекой..
Значица так. ВОПРОС РЕШЕН, МОЖНО ЗАКРЫТЬ. Причина была в библиотеке! Как я и предполагал. В этой библиотеке: https://github.com/Seeed-Studio/CAN_BUS_Shield Я тестировал CAN на ардуино, по той ссылке: http://digitrode.ru/computing-devices/mcu_cpu/1788-arduino-i-mcp2515-interfeys-can-dlya-arduino.html Там используется модифицированная библиотека, чтобы эту самую библиотеку можно было использовать на платах mcp2515 с кварцами на 8 МГц ! Примечание: эти платы изначально делались на кварцах 16 МГц. Китайцы начали делать клоны на 8 МГц. Поэтому, библиотеки начали переделывать. Есть предположение, что библиотека чутка не доделана. Почему - читаем ниже. Так вот, из-за того что библиотека переделана под кварц 8 МГц, ардуино выдает частоту в 2 раза меньше! Поэтому связка малина+кан не могла согласовать напряжение со связкой кан+ардуино. Я тупо начал перебирать кан-частоты и создавать can0-интерфейс на малине со стандартными ( скорее, в авто стандартные ) ) частотами. И, о чудо! На половинной частоте побежали пакеты на малине. Для надежности перепроверил: - зашил в ардуино скетч с другой частотой ( 250кгц ) - на малине создал can0-интерфейс на половинной частоте - 125кгц. - проверяем: работает! З.Ы. Что интересно, эта библиотека самая используемая во всех примерах. Если бы я соединял ардуино с ардуиной - этой баги не вышло бы. Если бы соединял малину с малиной - тоже не выявилось бы. Если бы был осциллограф - то сразу узнал бы по частоте))) З.З.Ы Где-то читал как переделывать, а, фактически, пересчитывать параметры в библиотеке. Есть предположение, что библиотека не совсем корректно переделана. А может и нет) Эта библиотека содержит инфу для 8, 16, 20 МГц. Возможно, надо было выбрать..