Other Parts Discussed in Thread: DLP-7970ABP, , MSP-EXP430F5529LP, MSP430F5529
1. Purchased TRF7970A and its evaluation board DLP-7970ABP from Digi-Key
2. Created a prototype board equipped with TRF7970A
3. RFID card could be recognized on the prototype board (hexadecimal 20-digit card number)
4. Written data to the memory of the card with this 20-digit card number(I wrote a valid and meaningful hexadecimal 8-digit number)
5. Read data from the card memory with this 20-digit card number(If you check the read data, all are 0x00000000)
6. No error has occurred and I think the data is probably not written or read
------------------- Below terminal display
write 0 Commando line
ID=E0040100A7224E940000 08
adr=0 data=0x53554745 irq_status=E0 uid_length=02 rd=0x0F01
adr=1 data=0x52424F58 irq_status=E0 uid_length=02 rd=0x0F01
adr=2 data=0x20190311 irq_status=E0 uid_length=02 rd=0x0F01
adr=3 data=0x01234567 irq_status=E0 uid_length=02 rd=0x0F01
adr=4 data=0x00000000 irq_status=E0 uid_length=02 rd=0x0F01
adr=5 data=0x00000000 irq_status=E0 uid_length=02 rd=0x0F01
adr=6 data=0xE0070000 irq_status=E0 uid_length=02 rd=0x0F01
adr=7 data=0x168513BD irq_status=E0 uid_length=02 rd=0x0F01
adr=8 data=0xE0070000 irq_status=E0 uid_length=02 rd=0x0F01
adr=9 data=0x16851161 irq_status=E0 uid_length=02 rd=0x0F01
adr=0 irq_status=0xE0 level=0x08 uid_length=0x05 data=0x00000000
adr=1 irq_status=0xE0 level=0x08 uid_length=0x05 data=0x00000000
adr=2 irq_status=0xE0 level=0x08 uid_length=0x05 data=0x00000000
adr=3 irq_status=0xE0 level=0x08 uid_length=0x05 data=0x00000000
adr=4 irq_status=0xE0 level=0x08 uid_length=0x05 data=0x00000000
adr=5 irq_status=0xE0 level=0x08 uid_length=0x05 data=0x00000000
adr=6 irq_status=0xE0 level=0x08 uid_length=0x05 data=0x00000000
adr=7 irq_status=0xE0 level=0x08 uid_length=0x05 data=0x00000000
adr=8 irq_status=0xE0 level=0x08 uid_length=0x05 data=0x00000000
adr=9 irq_status=0xE0 level=0x08 uid_length=0x05 data=0x00000000
trf7970a init...OK.
OK.
------------------- Below the above sources
//////////////////////////////////////////////////////////////////////////////
//rfid reset
//////////////////////////////////////////////////////////////////////////////
void trf7970a_sof_reset(void)
{
int i;
spi_write_byte(CMD_SOFT_INIT)//Soft Init (83h)
spi_write_byte(CMD_IDLE)//Idle (80h)
for(i=0; ;i++){
char data=trf7970a_get(GET_MODULATOR_CONTROL_REG);
if(data==0x91){
break;
}
if(i > 40000){
pc.printf("time out! 0x%02x\r",data);
return;
}
}
wait(1);
}
//////////////////////////////////////////////////////////////////////////////
//rfid reset
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//rfid init
//////////////////////////////////////////////////////////////////////////////
void trf7970a_init(void)
{
unsigned int i;
pc.puts("trf7970a init");
rfid_en1=1;//TRF7970A EN=1
rfid.format(8,1);//spi fomat
rfid.frequency(10000000); //spi osc
rfid_cs=CHIP_SEL_OFF;
rfid.write(0x00);//dummy
pc.putc('.');
trf7970a_sof_reset();//reset
pc.putc('.');
trf7970a_set(0x09,trf7970a_reg09_dat,2);//[Address-W]Modulator and SYS_CLK control
trf7970a_set(0x99,NOND,1);//Test external RF (RSSI at RX input with TX on)
wait(0.001);
rdat[2]=trf7970a_get(0x4F);//[Address-R]RSSI levels and oscillator status
trf7970a_set(0x00,0x21,2);//[Address-W]Chip status control (5V)
trf7970a_set(0x01,0x02,2);//[Address-W]ISO control
trf7970a_set(0x0A,trf7970a_reg0A_dat, 2);//[Address-W]RX special setting
trf7970a_set(0x0B,trf7970a_reg0B_dat, 2);//[Address-W]Regulator and I/O control
trf7970a_set(0x14,0x00,2);//[Address-W]Adjustable FIFO IRQ levels
trf7970a_set(0x18,0x0F,2);//[Address-W]NFC target detection level
rdat[3]=trf7970a_get(0x4C); //[Address-R]IRQ status
pc.putc('.');
for(i=0; i<0x20; i++){
rdat[3]=trf7970a_get(0x40 | i );//[Address-R]IRQ status
}
wait(0.007);
pc.puts("OK.\r");
}
//////////////////////////////////////////////////////////////////////////////
//rfid init
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//rfid CARD ID get
//////////////////////////////////////////////////////////////////////////////
//char *dat <-get data (card no)
//char *level <-rssi level
// ->UID_OK/UID_NG
char trf7970a_ID_get(char *dat, char *level)
{
int k;
rfid_cs=CHIP_SEL_ON;
rfid.write(0x8F);//[Command]Reset FIFO
rfid.write(0x91);//[Command]Transmission with CRC
rfid.write(0x3D);//0011 AWL REG1D_TX_LENGTH_BYTE_1
rfid.write(0x00);//<-0
rfid.write(0x30);//0011 AWL REG00_CHIP_STATUS_CONTROL
rfid.write(0x26);//0010 AWL REG06_TX_PULSE_LENGTH_CONTROL
rfid.write(0x01);//
rfid.write(0x00);//
rfid_cs=CHIP_SEL_OFF;
wait(0.007);
char irq_status=trf7970a_get(0x4C);//[Address-R]IRQ status
if(irq_status !=0xC0){
//pc.printf("%02X",irq_status);
level[0]=0;
trf7970a_set(0x8F,NOND,1);//[Command]Reset FIFO
return(UID_NG);
}
*level=(trf7970a_get(0x4F) & 0x07)+1;//[Address-R]RSSI levels and oscillator status
char uid_length=trf7970a_get(0x5C);//[Address-R]FIFO status
if(uid_length !=UID_LEN){
//pc.printf("%02X",uid_length);
level[0]=0;
trf7970a_set(0x8F,NOND,1);//[Command]Reset FIFO
return(UID_NG);
}
rfid_cs=CHIP_SEL_ON;
rfid.write(0x7F);//[Address-R]FIFO Read Continuous
for(k=0; k<UID_LEN; k++){//@@Read data from FIFO
dat[UID_LEN-k-1]=rfid.write(0x00);
}//@@Read data from FIFO
rfid_cs=CHIP_SEL_OFF;
trf7970a_set(0x8F,NOND,1);//[Command]Reset FIFO
return(UID_OK);
}
//////////////////////////////////////////////////////////////////////////////
//rfid CARD ID get
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//rfid ID write
//////////////////////////////////////////////////////////////////////////////
//char *card <-card no
//char adr <-card adr
//unsigned int dat <-card data
char trf7970a_ID_write_(char *card,char adr,unsigned int dat)
{
trf7970a_set(0x0C,0x0D,2);//Reset Irq Status
char *p=(char*)&dat;
pc.printf("adr=%d data=0x%02X%02X%02X%02X ",adr,p[3],p[2],p[1],p[0]);
rfid_cs=CHIP_SEL_ON;
rfid.write(0x8F);//[Command]Reset FIFO
rfid.write(0x91);//[Command]Transmission with CRC
rfid.write(0x3D);//AWL->1D
rfid.write(0x00);
rfid.write(0xF0);//CRL->10
rfid.write(0x62);//ARL->02
rfid.write(0x21);//AWL->01
rfid.write(card[7]);//card no
rfid.write(card[6]);
rfid.write(card[5]);
rfid.write(card[4]);
rfid.write(card[3]);
rfid.write(card[2]);
rfid.write(card[1]);
rfid.write(card[0]);
rfid.write(adr);//adr 0~9
rfid.write(p[3]);//write data
rfid.write(p[2]);
rfid.write(p[1]);
rfid.write(p[0]);
rfid_cs=CHIP_SEL_OFF;
wait_ms(10);
char irq_status=trf7970a_get(0x4C);//[Address-R]IRQ status
char uid_length=trf7970a_get(0x5C);//[Address-R]FIFO status
pc.printf("irq_status=%02X uid_length=%02X ",irq_status,uid_length);
char rd[2];
if(uid_length==2){
rfid_cs=CHIP_SEL_ON;
rfid.write(0x7F);//[Address-R]FIFO Read Continuous
rd[0]=rfid.write(0x00);//FIFO Read
rd[1]=rfid.write(0x00);//FIFO Read
rfid_cs=CHIP_SEL_OFF;
trf7970a_set(0x8F,NOND,1);//[Command]Reset FIFO
pc.printf("rd=0x%02X%02X ",rd[1],rd[0]);
}
if(irq_status !=0xE0){
disp_irq_status_Error(irq_status);
pc.putc('\r');
return(UID_NG);
}
pc.putc('\r');
return(UID_OK);
}
//////////////////////////////////////////////////////////////////////////////
//rfid ID write
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//rfid ID read
//////////////////////////////////////////////////////////////////////////////
//char *card <-card no
//char adr <-card adr
//unsigned int *dat <-read data
// ->UID_OK/UID_NG
char trf7970a_ID_read_(char *card,char adr,unsigned int *dat)
{
trf7970a_set(0x0C,0x0D,2);//Reset Irq Status
rfid_cs=CHIP_SEL_ON;
rfid.write(0x8F);//[Command]Reset FIFO
rfid.write(0x91);//[Command]Transmission with CRC
rfid.write(0x3D);//AWL->1D
rfid.write(0x00);
rfid.write(0xB0);//CWL->10
rfid.write(0x22);//AWL->02
rfid.write(0x20);//AWL->00
rfid.write(card[7]);//card no
rfid.write(card[6]);
rfid.write(card[5]);
rfid.write(card[4]);
rfid.write(card[3]);
rfid.write(card[2]);
rfid.write(card[1]);
rfid.write(card[0]);
rfid.write(adr);//card adr 0~9
rfid_cs=CHIP_SEL_OFF;
wait_ms(10);
char irq_status=trf7970a_get(0x4C);//[Address-R]IRQ status
char level=( trf7970a_get(0x4F) & 0x07)+1;//[Address-R]RSSI levels and oscillator status
char uid_length=trf7970a_get(0x5C);//[Address-R]FIFO status
pc.printf("adr=%d irq_status=0x%02X ",adr,irq_status);
pc.printf("level=0x%02X ",level);
pc.printf("uid_length=0x%02X ",uid_length);
if(uid_length==5){
rfid_cs=CHIP_SEL_ON;
rfid.write(0x7F);//[Address-R]FIFO Read Continuous
char *p=(char*)dat;
p[0]=rfid.write(0x00);//FIFO Read
p[0]=rfid.write(0x00);//FIFO Read
p[1]=rfid.write(0x00);//FIFO Read
p[2]=rfid.write(0x00);//FIFO Read
p[3]=rfid.write(0x00);//FIFO Read
rfid_cs=CHIP_SEL_OFF;
trf7970a_set(0x8F,NOND,1);//[Command]Reset FIFO
if(irq_status==0xE0){
pc.printf("data=0x%02X%02X%02X%02X\r",p[3],p[2],p[1],p[0]);
return(UID_OK);
}
}
pc.putc('\r');
disp_irq_status_Error(irq_status);
return(UID_NG);
}
//////////////////////////////////////////////////////////////////////////////
//rfid ID read
//////////////////////////////////////////////////////////////////////////////
------------------- Above source so far
The DLP-7970ABP evaluation board is out of order and cannot work.
I would appreciate it if you could point out any inconveniences in the above source settings.