2017-01-24 1 views
1

(je suis vraiment pas certain de quelles balises à appliquer, si des excuses à l'avance si je choisis des résultats erronés.)lecture/écriture appareils SPI

J'espère que ce n'est pas une question trop stupide, mais je suis vraiment perdu ici.

Un client m'a prêté un Atmel SAMA5D2 Xplained board with Linux4SAM pour jouer avec. J'essaie d'interfacer l'interface SPI, mais je n'ai aucune idée par où commencer.

Pour être clair, j'ai utilisé des planches similaires (pas celle-ci) en métal nu. J'ai aussi utilisé Linux pendant de nombreuses années et j'ai écrit quelques pilotes simples il y a quelques années. Et encore je suis perdu.

dmesg | grep spi me donne le résultat suivant:

[ 1.840000] atmel_spi f8000000.spi: version: 0x311 
[ 1.840000] atmel_spi f8000000.spi: Using dma0chan0 (tx) and dma0chan1 (rx) for DMA transfers 
[ 1.850000] atmel_spi f8000000.spi: Using FIFO (16 data) 
[ 1.860000] atmel_spi f8000000.spi: Atmel SPI Controller at 0xf8000000 (irq 32) 
[ 1.860000] m25p80 spi32766.0: at25df321a (4096 Kbytes) 

Nous en concluons qu'un pilote est chargé et qu'il est configuré pour utiliser le DMA. Pourtant, en regardant dans /dev/ il n'y a rien qui ressemble à un dispositif SPI (je comptais trouver quelque chose comme /dev/spidev ou /dev/spi32766.0 ou similaire.)

Est-ce que cela signifie qu'il n'y a pas de pilote de périphérique réel chargé? Dois-je en écrire un pour pouvoir utiliser le SPI?

Si je regarde le Makefile in the Linux4SAM source tree, je vois autour de la ligne 1171 que le noyau ne supporte pas le chargement des modules. Est-ce que cela implique que je dois recompiler le noyau pour inclure mon nouveau pilote? Cela semble être une approche stupide; pourquoi fournir une distribution Linux si je ne peux pas accéder au matériel avec?

Qu'est-ce qui me manque ici? (je me sens plutôt stupide ...)

EDIT Pour être clair: je veux accéder à l'interface SPI externe qui sera connecté à un certain appareil externe. Je pense que le m25p80 est une mémoire Flash interne; Je ne suis pas intéressé à lire/écrire là-bas.

+2

https://www.kernel.org/doc/Documentation/spi/spidev et vous devez activer spidev dans la configuration du noyau et dans le fournisseur de ressources tel que Device Tree. – 0andriy

+0

* "Si je regarde le Makefile ... le noyau ne supporte pas le chargement des modules." * - Vous ne trouverez pas de détails de configuration dans le Makefile. * "Je pense que le m25p80 est une mémoire Flash interne" * - Wrong, c'est un flash externe connecté via SPI. Noyau d'étude ** Documentation/spi/spi-summary **. Les périphériques SPI (esclaves) ont généralement des noms de nœud de périphérique dérivés de leur fonctionnalité, plutôt que l'interface qu'il utilise. Spidev est l'exception puisqu'il s'agit d'un kludge d'espace utilisateur. – sawdust

+0

@ 0andriy: spidev est activé dans la configuration du noyau.Je peux charger le module (modprobe), mais aucun nouveau périphérique n'apparaît. Je n'avais pas pensé à devoir spécifier quelque chose de plus dans l'arborescence des périphériques ... Je suis nouveau sur Linux sur de telles plateformes. – Ludo

Répondre

0

@ 0andriy m'a mis sur la bonne voie. J'ai dû ajouter une ressource SPI à l'arborescence de périphériques et faire clignoter le blob de l'arborescence des périphériques de compilation sur le tableau. (Comme je ne connaissais pas du tout les Device Trees, cette information est vraiment difficile à trouver ...). J'ai maintenant /dev/spidev32765.0. J'ajouté à l'arborescence des périphériques:

 spi1: [email protected] { 
      pinctrl-names = "default"; 
      pinctrl-0 = <&pinctrl_spi1_default>; 
      status = "okay"; 

      [email protected] { 
       compatible = "linux,spidev"; 
       spi-max-frequency = <83000000>; 
       reg = <0>; 
      }; 
     }; 

     [email protected] { 
      pinctrl_spi1_default: spi1_default { 
       pinmux = <PIN_PD25__SPI1_SPCK>, 
        <PIN_PD26__SPI1_MOSI>, 
        <PIN_PD27__SPI1_MISO>, 
        <PIN_PD28__SPI1_NPCS0>; 
       bias-disable; 
      }; 
     }; 

Bien que je lis que l'ajout du [email protected] est pas vraiment la bonne chose à faire (je vois bien en sortie dmesg « spidev spi32765.0: poussette DT: spidev directement dans la liste DT "). Maintenant, si je cours spidev_test il ne fonctionne toujours pas (il expire), mais je suppose que c'est pour une autre question.