initialization of the RP
Need to initialise the connection between the Raspberry Pi and the RFID module. The connection for which is shown in early blog rfid-and-raspberry-pi. This sets the speed of the SPI interface and configures the GPIO interface to allow a hardware reset to be sent to the module.
Code snippet
def __init__(self,spd=1000000): spi.openSPI(speed=spd) GPIO.setmode(GPIO.BOARD) # Set the mode of numbering the pins. GPIO.setup(self.NRSTPD, GPIO.OUT) # GPIO pin 22 is the output (NRSTPD - Reset) GPIO.output(self.NRSTPD, 1) # Set GPIO pin 22 to high (set low to reset) |
Reading the version setting
To access data on the module a read or write operation needs to be performed on the appropriate register, this requires sending the command via the spi.transfer command to the attached module.
For finding the version we need to read the register in the module that relates to the version. From the documentation for the NXP RC522 chip the register is known as VersionReg
VersionReg = 0x37 # shows the software version
The format of the command is given below.
msb = 1 for read / 0 for write | 6 bits for register address | lsb = 0 |
To correctly format the data to be sent for the NXP RC522, we need to do the following
- bit shift the register address left by one bit
- ensure the lsb is zero
- set the msb to 1 for a read / 0 for a write
(((MIFAREReader.VersionReg<<1) & 0x7E ) | 0x80,0)
The read operation returns a two byte value, the first indicating a successful operation, the second indicates the version which can be decoded.
The complete code for this is shown below
Code snippet
readerVersion = spi.transfer((((MIFAREReader.VersionReg<<1) & 0x7E ) | 0x80,0)) if readerVersion[1] == 0x91: print "Reader Version: MFRC522 1.0 software version" if readerVersion[1] == 0x92: print "Reader Version: MFRC522 2.0 software version" |
To read the software version from the module we just need to put the code together. A screenshot of the resulting output is shown below.
Sourcecode
I am developing a SourceForge site to host code from this project. At the moment it is only in the very initial stages of setting the site up.
Download of the code described is available here
http://sourceforge.net/projects/rasprfid/files/ReaderV.py/download
Over the coming months I will be publishing more on hacking RFID using the Raspberry Pi.
I am usually to blogging and i genuinely appreciate your content regularly.
ReplyDeleteThat’s such a useful post on RFID reader testing, ensuring smooth and correct communication between the SainSmart RFID-RC522 module and the Raspberry Pi. Great going!
ReplyDelete