Dans une arborescence de périphériques pour AM335x, comment savoir quelles valeurs pinctrl utiliser?

6

Dans le fichier dtsi du noyau Linux (am335x-bone-common.dtsi) pour le processeur AM335x, il y a l'arborescence am33xx_pinmux, avec les valeurs suivantes:

    i2c0_pins: pinmux_i2c0_pins {
        pinctrl-single,pins = <
            0x188 (PIN_INPUT_PULLUP | MUX_MODE0)    /* i2c0_sda.i2c0_sda */
            0x18c (PIN_INPUT_PULLUP | MUX_MODE0)    /* i2c0_scl.i2c0_scl */
        >;
    };

Comment savoir quelles valeurs utiliser pour l' pinctrl-single,pinsentrée?

Patrick
la source

Réponses:

6

Pour mettre à jour votre fichier .dts (comprenant le fichier am335x-bone-common.dtsi) pour une affectation pinmux, consultez la fiche technique afin de déterminer la ou les broches affectées à une fonction. Ceci est dans la section 4.3 (divisée en sous-sections par module). En cliquant sur le lien hypertexte pour obtenir une broche (vérifiez le type de votre colis, ZCE BALL ou ZCZ BALL), vous accédez à l'entrée correspondante du tableau 4-1 (Caractéristiques de la balle). Utilisez le tableau 4-1 pour déterminer le mode correct à définir pour cette broche.

Consultez ensuite le manuel TRM, Tableau 9-7 (REGISTRES CONTROL_MODULE), à la page 1363 pour la rév. K. Le tableau répertorie les registres de la fonction par défaut (mode probable 0). Les registres pin-mux commencent à l'offset 0x800 et cet offset doit être soustrait pour donner la première valeur du fichier .dts. Consultez la section 9.2.2 (Registres de contrôle de pad) pour connaître les options de la seconde valeur du fichier .dts (en plus du réglage de mode).

Par exemple, pour affecter la broche C18 du package ZCZ à SPI1 SCLK, cliquez sur le lien C18 dans le tableau 4-53 de la fiche technique (section 4.3.6.5). Cela vous amène à la ECAP0_IN_PWM0_OUTbroche dans le tableau 4-1. Vous voyez ici qu’une valeur de mode de 4 sera sélectionnée spi1_sclkpour cette broche.

Ensuite, dans le TRM, le tableau 9-7 montre les conf_ecap0_in_pwm0_outregistres commencent à l'adresse 0x964. Nous devons soustraire 0x800, donc la première valeur du fichier .dts est 0x164.

Ensuite, nous voulons sélectionner le mode 4 ( MUXMODE=4). Si nous voulons également activer un pull-up ( PULLTYPESEL=1, PULLUDEN=0), le champ de contrôle du pad est 0x14. L'entrée .dts serait alors:

&am33xx_pinmux {
    spi1_pins_s0: spi1_pins_s0 {
        pinctrl-single,pins = <
            0x164 0x14 /* ecap0_in_pwm0_out.spi1_sclk */
        >;
    };
};
Patrick
la source
Existe-t-il une référence sur la raison pour laquelle les registres pin-mux commencent au décalage 0x800? De plus, il y a beaucoup d'adresses de registres qui sont plus basses que, par 0x800exemple CTRL_USB_CTRL0. Qu'en est-il de ces valeurs pinctrl? Merci.
Adam