User Tools

Site Tools


tutorials:products:rfidnfc:faqs.html

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

tutorials:products:rfidnfc:faqs.html [2012/07/23 20:38]
ktownsend
tutorials:products:rfidnfc:faqs.html [2016/01/28 18:05]
Line 1: Line 1:
-====== Frequently Asked Questions ​ ====== 
  
-Blah blah blah 
- 
-===== Can I set a delay calling readPassiveTargetID() ?  ===== 
- 
-**Note:** This question only applies to the [[https://​github.com/​adafruit/​Adafruit_NFCShield_I2C|I2C Library]]. ​ The [[https://​github.com/​adafruit/​Adafruit-PN532|SPI library]] doesn'​t handle the timing the same way. 
- 
-readPassiveTargetID() intentionally waits around in a blocking delay until a card enters the magnetic field. ​ The reason for this blocking delay is to ensure a well-understood command/​response flow.  Once the magnetic field is activated and a read request is sent via readPassiveTargetID,​ you can keep sending new commands to the PN532, but the moment a card or tag enters the field, the PN532 will send a response to the initial read request, even if it's in the middle of some other response or activity. ​ To avoid having to debug this in SW, a blocking delay was implemented to keep the command/​response pattern as clear as possible. 
- 
-As a workaround to this blocking-delay limitation, **setPassiveActivationRetries(maxRetries)** was added to the latest NFC libraries to allow you to set a specific timeout after read requests. 
- 
-By default, the PN532 will wait forever for a card to enter the field. ​ By specifying a fixed number of retries via **MxRtyPassiveActivation** (see UM section 7.3.1 describing the **RFConfiguration** register, specifically CfgItem 5) the PN532 will abort the read request after specified number of attempts, and you can safely send new commands without worrying about mixing up response frames. ​ To wait forever, set MxRtyPassiveActivation to 0xFF.  To timeout after a fixed number of retries, set MxRtyPassiveActivation to anything less than 0xFF. 
- 
-Example Sketch: 
- 
-<​code>​ 
-#include <​Wire.h>​ 
-#include <​Adafruit_NFCShield_I2C.h>​ 
- 
-#define IRQ   (2) 
-#define RESET (3)  // Not connected by default on the NFC Shield 
- 
-Adafruit_NFCShield_I2C nfc(IRQ, RESET); 
- 
-void setup(void) { 
-  Serial.begin(115200);​ 
-  Serial.println("​Hello!"​);​ 
- 
-  nfc.begin();​ 
- 
-  uint32_t versiondata = nfc.getFirmwareVersion();​ 
-  if (! versiondata) { 
-    Serial.print("​Didn'​t find PN53x board"​);​ 
-    while (1); // halt 
-  } 
-  ​ 
-  // Got ok data, print it out! 
-  Serial.print("​Found chip PN5"); Serial.println((versiondata>>​24) & 0xFF, HEX);  
-  Serial.print("​Firmware ver. "); Serial.print((versiondata>>​16) & 0xFF, DEC);  
-  Serial.print('​.'​);​ Serial.println((versiondata>>​8) & 0xFF, DEC); 
-  ​ 
-  // Set the max number of retry attempts to read from a card 
-  // This prevents us from waiting forever for a card, which is 
-  // the default behaviour of the PN532. 
-  nfc.setPassiveActivationRetries(0xFF);​ 
-  ​ 
-  // configure board to read RFID tags 
-  nfc.SAMConfig();​ 
-    ​ 
-  Serial.println("​Waiting for an ISO14443A card"​);​ 
-} 
- 
-void loop(void) { 
-  boolean success; 
-  uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };  // Buffer to store the returned UID 
-  uint8_t uidLength; ​                       // Length of the UID (4 or 7 bytes depending on ISO14443A card type) 
-  ​ 
-  // Wait for an ISO14443A type cards (Mifare, etc.). ​ When one is found 
-  // '​uid'​ will be populated with the UID, and uidLength will indicate 
-  // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight) 
-  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A,​ &​uid[0],​ &​uidLength);​ 
-  ​ 
-  if (success) { 
-    Serial.println("​Found a card!"​);​ 
-    Serial.print("​UID Length: "​);​Serial.print(uidLength,​ DEC);​Serial.println("​ bytes"​);​ 
-    Serial.print("​UID Value: "); 
-    for (uint8_t i=0; i < uidLength; i++)  
-    { 
-      Serial.print("​ 0x"​);​Serial.print(uid[i],​ HEX);  
-    } 
-    Serial.println(""​);​ 
-    // Wait 1 second before continuing 
-    delay(1000);​ 
-  } 
-  else 
-  { 
-    // PN532 probably timed out waiting for a card 
-    Serial.println("​Timed out waiting for a card"​);​ 
-  } 
-} 
-</​code>​ 
/home/ladyada/public_html/wiki/data/pages/tutorials/products/rfidnfc/faqs.html.txt · Last modified: 2016/01/28 18:05 (external edit)