РЕШЕНО Raspberry pi + can

Тема в разделе "Raspberry Pi", создана пользователем starsnet, 2 сен 2020.

  1. starsnet

    starsnet Нерд

    Всем привет

    Имеется малина и такая плата: 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 ) ?
     
  2. ANV

    ANV Гуру

  3. starsnet

    starsnet Нерд

    Прописать - это установить или активировать в конфигурационном файле ?)

    Дрова есть, модули подгружены.
    Сами файла tbo тоже физически присутствуют.

    Где-то затык в прослойке с SPI, если я правильно понял.

    Даже если я отсылаю cansend'ом пакетики из самой малины - в статистике Can0 малины пусто.
    То есть, до кана пакеты не доходят. И не приходят.
     
  4. parovoZZ

    parovoZZ Гуру

    да.
    Не забывать, что у RPI два SPI модуля.
    ЛА есть?
     
  5. starsnet

    starsnet Нерд

    почему-то у меня отображается только один SPI - spi0.0
    хотя у меня rpi3b (где по описанию должно вроде 2 spi)

    что такое ЛА ?
     
  6. parovoZZ

    parovoZZ Гуру

    Логический анализатор
     
  7. starsnet

    starsnet Нерд

    не-а, нет.
     
  8. starsnet

    starsnet Нерд

    скорее всего, дело софтовое, не аппаратное.
    потому что, даже если я генерирую трафик cangen'ом - в can0 нет пакетов, до кана не доходит.

    предполагаю, что затык где-то в связке linux-spi или spi-can
     
  9. parovoZZ

    parovoZZ Гуру

    надо купить. С ним многие проблемы просто исчезают.
     
  10. Un_ka

    Un_ka Гик

    Вывод
    Код (Bash):
    ls /dev
    покажите.
     
  11. starsnet

    starsnet Нерд

    да я бы много чего хотел купить)
     
  12. starsnet

    starsnet Нерд

    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
     
  13. ANV

    ANV Гуру

    Какие дрова и что подгружено?
    Сам 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
     
  14. starsnet

    starsnet Нерд

    попробовал по той же ссылке создать виртуальный vcan0 интерфейс.
    засылаю cansend'ом в vcan0 пакеты - они там появляются!

    что-то не так с каном.

    не нужна там какая-нибудь библиотека ?
     
  15. starsnet

    starsnet Нерд


    да, значения прописаны (я думал привел ссчылку)

    вот инфа: 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
    //прописал еще и это, потом закоментировал - ничего не изменилось
     
  16. ANV

    ANV Гуру

    Посмотрите частоту кварца на плате, 8 или 12МГц
     
  17. starsnet

    starsnet Нерд


    не совсем понял - куда это всё надо писать ?

    где находится это DT, про который вы пишете ?
     
  18. starsnet

    starsnet Нерд

    12МГц. аппаратная часть в норме.

    пишу же - что-то с каном не так, с софтовой_частью/или с операционкой)
    либо с библиотекой..
     
  19. starsnet

    starsnet Нерд

    Значица так.

    ВОПРОС РЕШЕН, МОЖНО ЗАКРЫТЬ.

    Причина была в библиотеке!
    Как я и предполагал. В этой библиотеке: 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 МГц.
    Возможно, надо было выбрать..
     
    Igor68 и Un_ka нравится это.
  20. Un_ka

    Un_ka Гик

    @starsnet, добавьте префикс "решено" в редактировании заголовка темы.