2011-11-03 2 views
1

J'écris un pilote SPI pour linux. Certains documents pertinents sont http://www.mjmwired.net/kernel/Documentation/spi/spi-summary et http://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/kernel-api/ch25.html.Gestionnaire de rappel SPI complet

La plupart du temps, les transferts sont effectués avec succès et mon rappel de fin d'appel est appelé. Quand j'accède aux status des messages, je vois toujours zéro (indiquant). Le actual_length est de 112 (ma longueur de transfert) comme vous le souhaitez.

Cependant, après un certain temps, il peut arriver que je reçoive un rappel avec actual_length == 0. Tous les appels suivants ont même actual_length == 224. Après la fermeture du périphérique spi, le rappel est toujours appelé avec des longueurs de message qui augmentent rapidement (chaque appel est augmenté de 112), bien que je n'appelle plus spi_async.

Quelqu'un peut-il donner un indice sur ce qui pourrait causer ce comportement?

Merci beaucoup!

Répondre

0

Il s'est avéré que la raison était un problème de thread: Nous avons écrasé l'objet spi_message avant que le dernier transfert ait été achevé.

0

Je ne suis pas une expertise mais si vous utilisez dma etc., il y a peut-être un problème de cohérence de cache.

Questions connexes