Bonjour,
je souhaite faire dialoguer mon raspberry (pi zero w) avec un arduino (1seul pour commencer, plusieurs par la suite) à l'aide d'un bus CAN. Pour cela je me sert de modules MCP2515.
Toutefois je ne parviens pas à activer la connexion réseau can0, j'ai essayer de suivre des tutos mais je suis bloqué dés le début avec l'activation de l'overlay.
Il y'a quelques jours encore, je ne m'étais jamais intéressée au système de device-tree. Je pensais qu'il suffisait de faire un copier coller de la bonne ligne dans /boot/config.txt et que ça allait fonctionner ( retrospection ).
C'est en fouillant sur google à la recherche d'explication que je suis tombé sur l'article en anglais de raspberry.org sur le device-tree, et son équivalent en français sur ce site. A partir de là, j'ai mieux compris le fonctionnement de tout ça et j'ai pu commencer à chercher l'origine de mon problème.
Voila les opérations que j'ai effectuées :
Code : Tout sélectionner
pi@raspberrypi:~ $ sudo apt-get update && sudo apt-get upgrade
Code : Tout sélectionner
disable bluetooth and switch ttyS0 and ttyAMA0 (ttyAMA0 on GPIO)
dtoverlay=pi3-disable-bt
#can module
dtoverlay=mcp2515-can0
dtparam=oscillator=8000000
dtparam=spimaxfrequency=500000
dtparam=interrupt=12
#debug
dtdebug=1
Code : Tout sélectionner
pi@raspberrypi:~ $ dtoverlay -l
No overlays loaded
pi@raspberrypi:~ $ ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.16 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::d8dc:1d60:3b9c:4077 prefixlen 64 scopeid 0x20<link>
ether b8:27:eb:ad:9e:9b txqueuelen 1000 (Ethernet)
RX packets 2086 bytes 167759 (163.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 310 bytes 72120 (70.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Code : Tout sélectionner
pi@raspberrypi:~ $ sudo vcdbg log msg
...
001940.104: brfs: File read: 818 bytes
001946.049: dtdebug: Opened overlay file 'overlays/mcp2515-can0.dtbo'
001947.933: brfs: File read: /mfs/sd/overlays/mcp2515-can0.dtbo
001957.141: Loaded overlay 'mcp2515-can0'
001957.172: dtparam: oscillator=8000000
001957.422: dtdebug: Found override oscillator
001957.469: dtdebug: override oscillator: cell target clock-frequency @ offset 0 (size 4)
001958.012: dtparam: spimaxfrequency=500000
001958.271: dtdebug: Found override spimaxfrequency
001958.318: dtdebug: override spimaxfrequency: cell target spi-max-frequency @ offset 0 (size 4)
001959.059: dtparam: interrupt=12
001959.321: dtdebug: Found override interrupt
001959.363: dtdebug: override interrupt: cell target brcm,pins @ offset 0 (size 4)
001959.761: dtdebug: override interrupt: cell target interrupts @ offset 0 (size 4)
001960.541: dtdebug: Found fragment 0 (offset 72)
001963.377: dtdebug: merge_fragment(/soc/spi@7e204000,/fragment@0/__overlay__)
001963.404: dtdebug: +prop(status)
001964.228: dtdebug: merge_fragment() end
001964.286: dtdebug: Found fragment 1 (offset 148)
001967.319: dtdebug: merge_fragment(/soc/spi@7e204000/spidev@0,/fragment@1/__overlay__)
001967.344: dtdebug: +prop(status)
001968.198: dtdebug: merge_fragment() end
001968.256: dtdebug: Found fragment 2 (offset 228)
001969.759: dtdebug: merge_fragment(/soc/gpio@7e200000,/fragment@2/__overlay__)
001971.805: dtdebug: merge_fragment(/soc/gpio@7e200000/can0_pins,/fragment@2/__overlay__/can0_pins)
001971.831: dtdebug: +prop(brcm,pins)
001972.738: dtdebug: +prop(brcm,function)
001973.656: dtdebug: +prop(phandle)
001974.566: dtdebug: merge_fragment() end
001974.595: dtdebug: merge_fragment() end
001974.666: dtdebug: Found fragment 3 (offset 352)
001979.382: dtdebug: merge_fragment(/clocks,/fragment@3/__overlay__)
001982.751: dtdebug: merge_fragment(/clocks/can0_osc,/fragment@3/__overlay__/can0_osc)
001982.777: dtdebug: +prop(compatible)
001983.185: dtdebug: +prop(#clock-cells)
001983.631: dtdebug: +prop(clock-frequency)
001984.078: dtdebug: +prop(phandle)
001984.529: dtdebug: merge_fragment() end
001984.559: dtdebug: merge_fragment() end
001984.631: dtdebug: Found fragment 4 (offset 504)
001987.753: dtdebug: merge_fragment(/soc/spi@7e204000,/fragment@4/__overlay__)
001987.780: dtdebug: +prop(#address-cells)
001988.590: dtdebug: +prop(#size-cells)
001991.648: dtdebug: merge_fragment(/soc/spi@7e204000/mcp2515@0,/fragment@4/__overlay__/mcp2515@0)
001991.672: dtdebug: +prop(reg)
001992.458: dtdebug: +prop(compatible)
001993.239: dtdebug: +prop(pinctrl-names)
001994.090: dtdebug: +prop(pinctrl-0)
001994.961: dtdebug: +prop(spi-max-frequency)
001995.841: dtdebug: +prop(interrupt-parent)
001996.659: dtdebug: +prop(interrupts)
001997.498: dtdebug: +prop(clocks)
001998.365: dtdebug: +prop(phandle)
001999.236: dtdebug: merge_fragment() end
...
Dans ce cas, est-ce que le module est correctement intégré à mon device-tree :
Code : Tout sélectionner
pi@raspberrypi:~ $ dtc -I fs /proc/device-tree
...
mcp2515@0 {
compatible = "microchip,mcp2515";
clocks = <0x43>;
interrupt-parent = <0xb>;
interrupts = <0xc 0x2>;
phandle = <0x44>;
reg = <0x0>;
pinctrl-0 = <0x42>;
spi-max-frequency = <0x7a120>;
pinctrl-names = "default";
};
...
A ce niveau, ce qui me semble suspect, c'est de ne pas voir de propriété status sur ce nœud.
Est-ce que le module doit être physiquement branché pour que le système le détecte lors du boot et l'active ?
Et si oui, est-ce que le module doit être connecté sur un bus CAN actif également ?