Hay un concepto llamado superposición del árbol de dispositivos y puedes considerarlo como una solicitud de configuración de pin específica en el propio dispositivo.
Algunos pines en la placa están dedicados de manera predeterminada para fines específicos, SPI o I2C o solo para propósitos generales, pero algunos como PUEDEN definirse para su uso y eso es lo que debemos hacer.
Folder / lib / firmware contiene una lista de archivos de superposición binaria preconfigurados que podrían cargarse y que configuraría una lista específica de pines para un propósito específico.
Al principio, esos archivos se definen como archivos de origen que son archivos de texto normal con una sintaxis específica, pero en el momento en que deseamos usarlos necesitamos compilarlos con el comando dtc. Esta es la razón por la que tenemos la extensión dts para la fuente y dtbo para binario.
Por lo tanto, el proceso para CAN es el siguiente:
Inside / lib / firmware create file BB-DCAN1-00A0.dts :
/dts-v1/;
/plugin/;
/ {
compatible = "ti,beaglebone", "ti,beaglebone-black";
/* identification */
part-number = "dcan1pinmux";
fragment@0 {
target = <&am33xx_pinmux>;
__overlay__ {
dcan1_pins_s0: dcan1_pins_s0 {
pinctrl-single,pins = <
0x180 0x12 /* d_can1_tx, SLEWCTRL_FAST | INPUT_PULLUP | MODE2 */
0x184 0x32 /* d_can1_rx, SLEWCTRL_FAST | RECV_ENABLE | INPUT_PULLUP | MODE2 */
>;
};
};
};
fragment@1 {
target = <&dcan1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&dcan1_pins_s0>;
};
};
};
Ahora es necesario crear una superposición binaria con el siguiente comando en el mismo directorio:
root@host:/lib/firmware# dtc -O dtb -o BB-DCAN1-00A0.dtbo -b 0 -@ BB-DCAN1-00A0.dts
Finalmente ejecuta:
root@host:/lib/firmware#echo BB-DCAN1 > /sys/devices/bone_capemgr.*/slots
Ahora carga los módulos del kernel:
root@host# modprobe can
root@host# modprobe can-dev
root@host# modprobe can-raw
Herramientas de compilación:
root@host# svn co svn://svn.berlios.de/socketcan/trunk
root@host# cd trunk/can-utils/
root@host# make
Configurar la velocidad del bus:
root@host# ip link set can0 up type can bitrate 500000
root@host# ifconfig can0 up