J'essaie de lire l'octet de RFID qui représente le numéro de version de l'appareil. En utilisant le protocole SPI, j'obtiens 0x92 octet (RC522 version 2.0), et l'octet de demande est 0x37. Tout fonctionne bien sauf les positions de l'octet. Avant que j'obtienne le bon (0x92) comme prévu pour obtenir ce que je ne sais pas pourquoi il est imprimé. La sortie:Récupérer les données parasites avant que l'octet de droite n'arrive. SPID RFID
Hello, world
received: 1
received: 92
= v2.0
received: 0
received: 92
= v2.0
received: 0
received: 92
= v2.0
received: 0
received: 92
= v2.0
received: 0
received: 92
= v2.0
je l'ai dit, bien Ok, laissez-moi simplement supprimer la printf("received: %x\n", data); \
linefrom la bibliothèque spi.h. Mais alors je n'ai rien imprimé (sauf Hello World). Une autre fonction qui devrait imprimer seulement "version 2.0"
quand 92h retourné ne le fera pas, pourquoi- parce que la variable v
retournée est 9f
au lieu de 92
et toutes les précédentes sont différentes. Peut-être que je devrais placer un peu d'attente ou de retarder la fonction afin de laisser le RC522 exécuter la commande? Et juste après l'avoir laissé imprimer. Mais même si cela se produisait, pourquoi la suppression printf
brise toute la sortie? Voici le code où SPI_READ est en appelé de:
static uint8_t
read_register_rfid(uint8_t dev_cmd)
{
uint8_t ret = 0;
GPIO_CLR_PIN(GPIO_C_BASE, GPIO_PIN_1);
SPI_WRITE(((dev_cmd << 1) & 0x7e) | 0x80);
SPI_READ(ret);
GPIO_SET_PIN(GPIO_C_BASE, GPIO_PIN_1);
return ret;
}
et la fonction de vérification de la version:
void
test_ver()
{
uint8_t reg=1;
// Get the MFRC522 firmware version
uint8_t v = 0;
while(reg!=0xa){
v = read_register_rfid(0x37);
//printf("%x\n", v);
// Lookup which version
switch(v) {
case 0x88: printf(" = (clone)"); break;
case 0x90: printf(" = v0.0"); break;
case 0x91: printf(" = v1.0"); break;
case 0x92: printf(" = v2.0\n"); break;
// default: printf(" = (unknown)\n");
}
reg++;
//When 0x00 or 0xFF is returned, communication probably failed
}
if ((v == 0x00) || (v == 0xFF))
printf("WARNING: Communication failure?\n");
}
N'utilisez jamais une macro qu'une fonction fera aussi bien! Et nous ne savons même pas que le matériel est correct, moins ce que les appareils sont censés transmettre. Utilisez le débogueur et un analyseur de portée ou logique. – Olaf
@Olaf pourriez-vous me conseiller un débogueur pour cela? –
Poser des questions sur les outils est explicitement hors sujet. Mais vous devriez utiliser le débogueur qui vient avec votre toolchain ou celui qui est sutable pour cela. Pour une portée/LA voir google. – Olaf