El archivo .dts que se indicará a continuación esta basado en la configuración de PMDX-432 de la Beaglebone Black. El Device Tree Overlay de PMDX-432 se llama
BB-BLACK-LCNC-K9-00A0.dts.
Las dos primeras lineas indican cuál es la versión del dts y que el archivo es un plugin, el corchete indica el punto de inicio del programa, compatible es el que va a determinar con que plataformas funcionara el DT Overlay y la parte de identification es el nombre y la versión con la que aparecera nuestro DT Overlay.
/dts-v1/;
/plugin/;
/ {
compatible = "ti,beaglebone", "ti,beaglebone-black";
/* identification */
part-number = "BBB-LCNC-MF5";
version = "00A0";
En exclusive-use se pone todos los pines que se desea utilizar y para poder guiarse se pueden comentar los que no se van a usar, en este pedaso de código los gpio que ocupa la emmc de la beaglebone black se usa porque carga el S.O. Linux Debian desde la emmc pero si no se usara la emmc tranquilamente se podría deshabilitar del archivo /boot/uEnv.txt y descomenta los pines de la eMMC.
Los pines nombrados como Libre son los que están disponibles para usar con Machinekit y que no interfieren con la pantalla LCD, pero pueden interferir con otros pines usados en comunicación SPI o I2C o UART. Si se pretende usar esos pines con otros dts se los debe comentar.
/* state the resources this cape uses */ exclusive-use = /* the pin header uses */ /* "J8.3", gpio1_6 eMMC*/ /* "J8.4", gpio1_7 eMMC*/ /* "J8.5", gpio1_2 eMMC*/ /* "J8.6", gpio1_3 eMMC*/ "J8.7", /* gpio2_2 -> Libre*/ "J8.8", /* gpio2_3 -> Libre*/ "J8.9", /* gpio2_5 -> Libre*/ "J8.10", /* gpio2_4 -> Libre*/ "J8.11", /* gpio1_13-> lcd R1 -> Libre*/
En la parte de "the hardware IP uses" se ponen los mismos pines que se utilizan en "the pin header uses", como se ve en el pedazo de código gpio1_6, gpio1_7, gpio1_2, gpio1_3; pertenecen a los pines J8.3, J8.4, J8.5 y J8.6 respectivamente, pero estos no se usaran ya que estan comentados. Los demás son los que funcionarán con Machinekit.
/* the hardware IP uses */ /* "gpio1_6", */ /* "gpio1_7", */ /* "gpio1_2", */ /* "gpio1_3", */ "gpio2_2", "gpio2_3", "gpio2_5", "gpio2_4", "gpio1_13",
En fragment se pone cuales van a ser las funciones que van a realizar los pines habilitados en "exclusive-use", "target" hace referencia al microcontrolador que usa la beaglebone y beaglebone black. "__overlay__" se usa para dar inicio a los pines que van a ser usados según el registro y tipo de modo que se desee.
fragment@0 { target = <&am33xx_pinmux>; __overlay__ {
"MF5_gpio_pins: MF5_gpio_pins" es el nombre que se le va a dar todo el grupo de pines que se usaran en este DT Overlay. El siguiente archivo que he subido BBB-Pins, contiene la información de las direcciones de los pines y calcula el modo del pin. Descarga: BB-Pins.rar.
La primera columna indica la dirección de los pines esta se calcula con el register offset 44e10*** con una base de 0x800. si el register offset del pin J8.3 es 0x818 (44e10818) y de base siempre se tiene 0x800 (44e10800), entonces se resta el 0x818 - 0x800 = 0x018. El segundo valor de la columna es el modo con el cuál se quiere configurar el pin existen 8 tipos de modos los cuales se indica en el documento de excel. Como utilizár estos indicaré en otro tutorial, por el momento dejando a los pines con el modo default 0x3F funciona perfectamente.
MF5_gpio_pins: MF5_gpio_pins { pinctrl-single,pins = < /* 0x018 mmc J8.3 gpio1_6 */ /* 0x01C mmc J8.4 gpio1_7 */ /* 0x008 mmc J8.5 gpio1_2 */ /* 0x00C mmc J8.6 gpio1_3 */ 0x090 0x3F /* J8.7 gpio2_2 */ 0x094 0x3F /* J8.8 gpio2_3 */ 0x09C 0x3F /* J8.9 gpio2_5 */ 0x098 0x3F /* J8.10 gpio2_4 */ 0x034 0x3F /* J8.11 gpio1_13 */ 0x030 0x3F /* J8.12 gpio1_12 */ 0x024 0x3F /* J8.13 gpio0_23 */
El último fragmento es el que habilita toda la configuración que se ha realizado anteriormente en "
pinctrl-0" se pone el mismo nombre que se utilizó para el grupo de pines del DT Overlay.
fragment@1 { target = <&pruss>; __overlay__ { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&MF5_gpio_pins>; }; };
Código completo del .dts
//This source file is provided under MIT License terms. //Copyright (c) 2013 Calypso Ventures, Inc. // //Permission is hereby granted, free of charge, to any person obtaining a copy //of this software and associated documentation files (the "Software"), to deal //in the Software without restriction, including without limitation the rights //to use, copy, modify, merge, publish, distribute, sublicense, and/or sell //copies of the Software, and to permit persons to whom the Software is //furnished to do so, subject to the following conditions: // //The above copyright notice and this permission notice shall be included in //all copies or substantial portions of the Software. // //THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR //IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, //FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE //AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER //LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, //OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN //THE SOFTWARE. /dts-v1/; /plugin/; / { compatible = "ti,beaglebone", "ti,beaglebone-black"; /* identification */ part-number = "BBB-LCNC-MF5"; version = "00A0"; /* state the resources this cape uses */ exclusive-use = /* the pin header uses */ /* "J8.3", gpio1_6 eMMC*/ /* "J8.4", gpio1_7 eMMC*/ /* "J8.5", gpio1_2 eMMC*/ /* "J8.6", gpio1_3 eMMC*/ "J8.7", /* gpio2_2 -> Libre*/ "J8.8", /* gpio2_3 -> Libre*/ "J8.9", /* gpio2_5 -> Libre*/ "J8.10", /* gpio2_4 -> Libre*/ "J8.11", /* gpio1_13-> lcd R1 -> Libre*/ "J8.12", /* gpio1_12-> lcd G1 -> Libre*/ "J8.13", /* gpio0_23-> lcd G0 -> Libre*/ "J8.14", /* gpio0_26-> lcd R0 -> Libre*/ "J8.15", /* gpio1_15-> lcd R2 -> Libre*/ "J8.16", /* gpio1_14-> lcd B2 -> Libre*/ "J8.17", /* gpio0_27-> lcd B1 -> Libre*/ "J8.18", /* gpio2_1 -> Libre*/ "J8.19", /* gpio0_22-> lcd B0 -> Libre*/ /* "J8.20", gpio1_31 eMMC*/ /* "J8.21", gpio1_30 eMMC*/ /* "J8.22", gpio1_5 eMMC*/ /* "J8.23", gpio1_4 eMMC*/ /* "J8.24", gpio1_1 eMMC*/ /* "J8.25", gpio1_0 eMMC*/ "J8.26", /* gpio1_29-> Libre*/ /* "J8.27", gpio2_22-> lcd VSYNC*/ /* "J8.28", gpio2_24-> lcd PCLK*/ /* "J8.29", gpio2_23-> lcd HSYNC*/ /* "J8.30", gpio2_25-> lcd DE*/ /* "J8.31", gpio0_10-> lcd B6*/ /* "J8.32", gpio0_11-> lcd B7*/ /* "J8.33", gpio0_9 -> lcd B5*/ /* "J8.34", gpio2_17-> lcd B3*/ /* "J8.35", gpio0_8 -> lcd B4*/ /* "J8.36", gpio2_16-> lcd G7*/ /* "J8.37", gpio2_14-> lcd G5*/ /* "J8.38", gpio2_15-> lcd G6*/ /* "J8.39", gpio2_12-> lcd G3*/ /* "J8.40", gpio2_13-> lcd G4*/ /* "J8.41", gpio2_10-> lcd R7*/ /* "J8.42", gpio2_11-> lcd G2*/ /* "J8.43", gpio2_8 -> lcd R5*/ /* "J8.44", gpio2_9 -> lcd R6*/ /* "J8.45", gpio2_6 -> lcd R3*/ /* "J8.46", gpio2_7 -> lcd R4*/ "J9.11", /* gpio0_30-> Libre*/ "J9.12", /* gpio1_28-> Libre*/ "J9.13", /* gpio0_31-> Libre*/ /* "J9.14", gpio1_18-> LCD ehrpwm1A*/ "J9.15", /* gpio1_16-> Libre*/ "J9.16", /* gpio1_19-> Libre*/ "J9.17", /* gpio0_5 -> Libre*/ "J9.18", /* gpio0_4 -> Libre*/ /* "J9.19", gpio0_13-> EEPROM/I2C*/ /* "J9.20", gpio0_12-> EEPROM/I2C*/ "J9.21", /* gpio0_3 -> Libre*/ "J9.22", /* gpio0_2 -> Libre*/ "J9.23", /* gpio1_17-> Libre*/ "J9.24", /* gpio0_15-> Libre*/ "J9.25", /* gpio3_21-> Libre*/ "J9.26", /* gpio0_14-> Libre*/ "J9.27", /* gpio3_19-> Libre*/ "J9.28", /* gpio3_17-> Libre*/ "J9.29", /* gpio3_15-> Libre*/ "J9.30", /* gpio3_16-> Libre*/ "J9.31", /* gpio3_14-> Libre*/ "J9.41", /* gpio3_20-> Libre*/ "J9.42", /* gpio3_18-> Libre*/ /* the hardware IP uses */ /* "gpio1_6", */ /* "gpio1_7", */ /* "gpio1_2", */ /* "gpio1_3", */ "gpio2_2", "gpio2_3", "gpio2_5", "gpio2_4", "gpio1_13", "gpio1_12", "gpio0_23", "gpio0_26", "gpio1_15", "gpio1_14", "gpio0_27", "gpio2_1", "gpio0_22", /* "gpio1_31", */ /* "gpio1_30", */ /* "gpio1_5", */ /* "gpio1_4", */ /* "gpio1_1", */ /* "gpio1_0", */ "gpio1_29", /* "gpio2_22", */ /* "gpio2_24", */ /* "gpio2_23", */ /* "gpio2_25", */ /* "gpio0_10", */ /* "gpio0_11", */ /* "gpio0_9", */ /* "gpio2_17", */ /* "gpio0_8", */ /* "gpio2_16", */ /* "gpio2_14", */ /* "gpio2_15", */ /* "gpio2_12", */ /* "gpio2_13", */ /* "gpio2_10", */ /* "gpio2_11", */ /* "gpio2_8", */ /* "gpio2_9", */ /* "gpio2_6", */ /* "gpio2_7", */ "gpio0_30", "gpio1_28", "gpio0_31", /* "gpio1_18", */ "gpio1_16", "gpio1_19", "gpio0_5", "gpio0_4", /* "gpio0_13", */ /* "gpio0_12", */ "gpio0_3", "gpio0_2", "gpio1_17", "gpio0_15", "gpio3_21", "gpio0_14", "gpio3_19", "gpio3_17", "gpio3_15", "gpio3_16", "gpio3_14", "gpio3_20", "gpio3_18", "pru0"; fragment@0 { target = <&am33xx_pinmux>; __overlay__ { MF5_gpio_pins: MF5_gpio_pins { pinctrl-single,pins = < /* 0x018 mmc J8.3 gpio1_6 */ /* 0x01C mmc J8.4 gpio1_7 */ /* 0x008 mmc J8.5 gpio1_2 */ /* 0x00C mmc J8.6 gpio1_3 */ 0x090 0x3F /* J8.7 gpio2_2 */ 0x094 0x3F /* J8.8 gpio2_3 */ 0x09C 0x3F /* J8.9 gpio2_5 */ 0x098 0x3F /* J8.10 gpio2_4 */ 0x034 0x3F /* J8.11 gpio1_13 */ 0x030 0x3F /* J8.12 gpio1_12 */ 0x024 0x3F /* J8.13 gpio0_23 */ 0x028 0x3F /* J8.14 gpio0_26 */ 0x03C 0x3F /* J8.15 gpio1_15 */ 0x038 0x3F /* J8.16 gpio1_14 */ 0x02C 0x3F /* J8.17 gpio0_27 */ 0x08C 0x3F /* J8.18 gpio2_1 */ 0x020 0x3F /* J8.19 gpio0_22 */ /* 0x084 mmc J8.20 gpio1_31 */ /* 0x080 mmc J8.21 gpio1_30 */ /* 0x014 mmc J8.22 gpio1_5 */ /* 0x010 mmc J8.23 gpio1_4 */ /* 0x004 mmc J8.24 gpio1_1 */ /* 0x000 mmc J8.25 gpio1_0 */ 0x07C 0x3F /* J8.26 gpio1_29 */ /* 0x0E0 0x3F J8.27 gpio2_22 */ /* 0x0E8 0x3F J8.28 gpio2_24 */ /* 0x0E4 0x3F J8.29 gpio2_23 */ /* 0x0EC 0x3F J8.30 gpio2_25 */ /* 0x0D8 0x3F J8.31 gpio0_10 */ /* 0x0DC 0x3F J8.32 gpio0_11 */ /* 0x0D4 0x3F J8.33 gpio0_9 */ /* 0x0CC 0x3F J8.34 gpio2_17 */ /* 0x0D0 0x3F J8.35 gpio0_8 */ /* 0x0C8 0x3F J8.36 gpio2_16 */ /* 0x0C0 0x3F J8.37 gpio2_14 */ /* 0x0C4 ??? J8.38 gpio2_15 */ /* 0x0B8 0x3F J8.39 gpio2_12 */ /* 0x0BC 0x3F J8.40 gpio2_13 */ /* 0x0B0 0x3F J8.41 gpio2_10 */ /* 0x0B4 0x3F J8.42 gpio2_11 */ /* 0x0A8 0x3F J8.43 gpio2_8 */ /* 0x0AC 0x3F J8.44 gpio2_9 */ /* 0x0A0 0x3F J8.45 gpio2_6 */ /* 0x0A4 0x3F J8.46 gpio2_7 */ 0x070 0x3F /* J9.11 gpio0_30 */ 0x078 0x3F /* J9.12 gpio1_28 */ 0x074 0x3F /* J9.13 gpio0_31 */ /* 0x048 0x3F J9.14 gpio1_18 */ 0x040 0x3F /* J9.15 gpio1_16 */ 0x04C 0x3F /* J9.16 gpio1_19 */ 0x15C 0x3F /* J9.17 gpio0_5 */ 0x158 0x3F /* J9.18 gpio0_4 */ /* 0x17C N/C J9.19 gpio0_13 */ /* 0x178 N/C J9.20 gpio0_12 */ 0x154 0x3F /* J9.21 gpio0_3 */ 0x150 0x3F /* J9.22 gpio0_2 */ 0x044 0x3F /* J9.23 gpio1_17 */ 0x184 0x3F /* J9.24 gpio0_15 */ 0x1AC 0x3F /* J9.25 gpio3_21 */ 0x180 0x3F /* J9.26 gpio0_14 */ 0x1A4 0x3F /* J9.27 gpio3_19 */ 0x19C 0x3F /* J9.28 gpio3_17 */ 0x194 0x3F /* J9.29 gpio3_15 */ 0x198 0x3F /* J9.30 gpio3_16 */ 0x190 0x3F /* J9.31 gpio3_14 */ 0x1A8 0x3F /* J9.41 gpio3_20 */ 0x1A0 0x3F /* J9.42 gpio3_18 */ >; }; }; }; fragment@1 { target = <&pruss>; __overlay__ { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&MF5_gpio_pins>; }; }; };
Para probarlo crear un archivo llamado BBB-LCNC-MF5-00A0.dts y pegar toda la info de arriba.
touch BBB-LCNC-MF5-00A0.dts nano BBB-LCNC-MF5-00A0.dts
El siguiente código es un script para compilar el archivo .dts y copiarlo a /lib/firmware.
#!/bin/sh #This source file is provided under MIT License terms. #Copyright (c) 2013 Calypso Ventures, Inc. # #Permission is hereby granted, free of charge, to any person obtaining a copy #of this software and associated documentation files (the "Software"), to deal #in the Software without restriction, including without limitation the rights #to use, copy, modify, merge, publish, distribute, sublicense, and/or sell #copies of the Software, and to permit persons to whom the Software is #furnished to do so, subject to the following conditions: # #The above copyright notice and this permission notice shall be included in #all copies or substantial portions of the Software. # #THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE #AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, #OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN #THE SOFTWARE. dtc -O dtb -o BBB-LCNC-MF5-00A0.dtbo -b 0 -@ BBB-LCNC-MF5-00A0.dts && \ cp BBB-LCNC-MF5-00A0.dtbo /lib/firmware/
Para ejecutarlo poner en la misma carpeta que el archivo BBB-LCNC-MF5-00A0.dts.
touch dtc.sh nano dtc.sh (pegar codigo script) sudo ./dtc.sh
Por ultimo ejecutar el Device Tree Overlay creado.
sudo su cd /lib/firmware echo BBB-LCNC-MF5 > /sys/devices/bone_capemgr.*/slots cd /sys/kernel/debug/pinctrl/44e10800.pinmux cat pinmux-pins | more
Si todo funcionó perfectamente se verán todos los pines que estan habilitados como los del LCD y BBB-LCNC-MF5.
El siguiente tutorial es como se logra la configuración para exportar los pines como entradas o salidas y utilizarlos con Machinekit (LinuxCNC), estos pines funcionarán en base al DT Overlay creado en este tutorial.
No hay comentarios.:
Publicar un comentario