PN532 en i2c

Bonjour à tous,

J'essaie d'interfacer un PN532 avec un ATmega1284 en i2c et j'avoue ne pas arriver à dialoguer correctement.

Sur le circuit, il y a déjà d'autres composants i2c qui fonctionnent parfaitement. Je pense que ce qui me pose problème est dans le dialogue à plus haut niveau (le datasheet, l'application design et le user manual de NXP sont subtilement différents).

Je considère que l'adresse du composant i2c est 0x24 (dans l'une des docs, il faut l'initialiser, sa valeur par défaut étant... 0x00 !).

Le composant semble répondre puisque je reçois une trame ACK valide. Mais à la suite de cette trame, il laisse le bus dans un état bizarre. La machine à états du processeur est en vrac et il faut le réinitialiser (électriquement) pour reprendre la main sur le bus. Un reset logique ne suffit pas.

Voici ce que je fais :

i2c_start() envoi de (0x24 << 1) | write réception de i2c_SLAW_ACK envoi de PN532_PREAMBLE réception de i2c_WDATA_ACK envoi de PN532_STARTCODE1 réception de i2c_WDATA_ACK envoi de PN532_STARTCODE2 réception de i2c_WDATA_ACK ... envoi de la suite de la trame contenant l'instruction GetFirmwareVersion ... i2c_stop()

Tout se passe bien, je reçois bien les signaux attendus. À partir de là, si j'ai bien compris la doc, je dois attendre une trame ACK de la part du PN532. Il faut tout d'abord initialiser une communication, en attendant que le bit READY soit positionné à 1.

boucle infinie i2c_start() envoi de (0x24 << 1) | read réception de i2c_SLAR_ACK réception d'un octet positionnement de i2c_RDATA_ACK

si READY == 1 sortie de la boucle

i2c_stop() fin boucle Lecture des six octets suivants (réception de i2c_RDATA_ACK après chaque octet) i2c_stop().

Cela se passe encore bien puisque je récupère : 00 00 FF 00 FF 00 qui correspond à une trame ACK.

Sauf qu'après cela, si je peux bien reprendre la main sur le bus avec un i2c_start(), toute tentative d'écriture de l'OPcode (adresse du composant + bit lecture/écriture) échoue. Typiquement, le bit TWINT reste toujours à 0 lorsque je tente une écriture sur le bus.

Et là, je sèche lamentablement.

Je suppose que le PN532 attend un dialogue différent de celui que je lui impose, mais j'ai beau relire la doc, je ne vois pas mon erreur.

Toute indication sera la bienvenue,

JKB

Reply to
JKB
Loading thread data ...

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.