This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CCS/DLP-7970ABP: DLP7970 reading some smart cards only as mifare.

Part Number: DLP-7970ABP
Other Parts Discussed in Thread: TRF7970A,

Tool/software: Code Composer Studio

I am driving DLP7970 over SPI with tm4c123. I am trying to read the card number and expiration date. T0 type smart cards are generally not a problem, but on T1 cards, they usually only read as mifare. What is the reason for this error? Why can I only read mifare information on some cards?

  • Hello,

    can you please give me more details about what cards are you using. I am not aware of the T0 T1 types you are referring to.

    Best regards,

    Helfried 

  • Hi Helfried,

    Thank you for response.

    I am working on T4t type smart cards. I can read mastercard type cards. In visa cards, the t4t I have sent below falls into error status.

    With this structure, I can read the card number and expiration date information from mastercards. But in visa cards, it falls to the error I marked below with bold font.

    void T4T_stateMachine(void)
    {
    tISO7816ConnectionStatus sISO7816Status;
    uint16_t ui16RxLength;
    uint8_t * pui8RxData;
    uint8_t pui8LenBuffer[3];
    uint8_t pdolLen = 0;

    uint8_t i;

    // Waiting to get a response for one of the states
    if(g_bT4WaitForRsp)
    {
    switch(g_eT4TState)
    {
    case T4T_APP_SEL:

    sISO7816Status = ISO_7816_4_getSelectStatus();
    ISO_7816_4_getPacketStatus(&pui8RxData,&ui16RxLength);

    #ifdef NFC_DEBUG
    if((offset + ui16RxLength) >= 1024)
    offset = 0;
    memcpy(whole+offset,pui8RxData,ui16RxLength);
    offset += ui16RxLength;
    #endif

    if(sISO7816Status == ISO_7816_4_CONNECTION_SELECT_SUCCESS)
    {
    g_bT4WaitForRsp = false;

    pdolLen = parseForPDOL(pui8RxData);
    g_eT4TState = T4T_EMV_GET_PROC;
    //g_eT4TState =T4T_EMV_READ_REC_TEST;

    }
    else if(sISO7816Status == ISO_7816_4_CONNECTION_SELECT_FAIL)
    {
    g_bT4WaitForRsp = false;
    //g_eT4TState = T4T_ERROR;

    //TODO: What should be done here
    //if(((pui8RxData[0] << 8) | pui8RxData[1]) == 0x6A82)
    {
    aidIdx++;
    }

    if(aidIdx >= AID_COUNT)
    {
    //g_eT4TState = T4T_ERROR;
    g_eT4TState = T4T_SELECTED_IDLE;
    //Serial_printfLine("AID does not Support");
    }

    }

    break;

    case T4T_EMV_READ_REC_ALL:

    sISO7816Status = ISO_7816_4_getWriteRawStatus();
    ISO_7816_4_getPacketStatus(&pui8RxData,&ui16RxLength);
    #ifdef NFC_DEBUG
    if((offset + ui16RxLength) >= 1024)
    offset = 0;
    memcpy(whole+offset,pui8RxData,ui16RxLength);
    offset += ui16RxLength;
    #endif
    if(sISO7816Status == ISO_7816_4_CONNECTION_WRITE_RAW_SUCCESS)
    {
    g_bT4WaitForRsp = false;

    parseForData_CL(pui8RxData);

    if(foundObj_CL >= 3)
    {
    g_eT4TState = T4T_SELECTED_IDLE;
    }

    if(recNo > 6)
    {
    recNo = 1;
    sfiNo++;

    if(sfiNo > 6)
    {
    g_eT4TState = T4T_SELECTED_IDLE;

    }

    }
    else
    recNo++;

    // Go Select the Capability Container

    }
    else if(sISO7816Status == ISO_7816_4_CONNECTION_WRITE_RAW_FAIL)
    {
    g_bT4WaitForRsp = false;

    //if(((pui8RxData[0] << 8) | pui8RxData[1]) == 0x6A82 ||
    //((pui8RxData[0] << 8) | pui8RxData[1]) == 0x6A83 ||
    //((pui8RxData[0] << 8) | pui8RxData[1]) == 0x6A86)

    if(((pui8RxData[0] << 8) | pui8RxData[1]) == 0x6985)
    {
    _nop();
    _nop();
    }


    {

    if(recNo > 6)
    {
    recNo = 1;
    sfiNo++;
    if(sfiNo > 6)
    {
    g_eT4TState = T4T_SELECTED_IDLE;
    }

    }
    else
    recNo++;

    if(((pui8RxData[0] << 8) | pui8RxData[1]) == 0x6985)
    _nop();

    }
    /*else
    {
    //g_eT4TState = T4T_ERROR;
    //recNo++;
    }*/

    }
    break;

    case T4T_EMV_GET_PROC:

    sISO7816Status = ISO_7816_4_getWriteRawStatus();
    ISO_7816_4_getPacketStatus(&pui8RxData,&ui16RxLength);
    #ifdef NFC_DEBUG
    if((offset + ui16RxLength) >= 1024)
    offset = 0;
    memcpy(whole+offset,pui8RxData,ui16RxLength);
    offset += ui16RxLength;
    #endif
    if(sISO7816Status == ISO_7816_4_CONNECTION_WRITE_RAW_SUCCESS)
    {
    g_bT4WaitForRsp = false;

    parseForFiles(pui8RxData);

    recNo = FileRecords[fileIdx].startRec;
    sfiNo = FileRecords[fileIdx].sfi;
    // Go Select the Capability Container
    //g_eT4TState = T4T_SEL_CC;
    g_eT4TState = T4T_EMV_READ_REC;
    }
    else if(sISO7816Status == ISO_7816_4_CONNECTION_WRITE_RAW_FAIL)
    {
    g_bT4WaitForRsp = false;
    g_eT4TState = T4T_EMV_READ_REC_ALL;
    }

    break;


    case T4T_EMV_READ_REC:
    sISO7816Status = ISO_7816_4_getWriteRawStatus();
    ISO_7816_4_getPacketStatus(&pui8RxData,&ui16RxLength);
    #ifdef NFC_DEBUG
    if((offset + ui16RxLength) >= 1024)
    offset = 0;
    memcpy(whole+offset,pui8RxData,ui16RxLength);
    offset += ui16RxLength;
    #endif
    if(sISO7816Status == ISO_7816_4_CONNECTION_WRITE_RAW_SUCCESS)
    {
    g_bT4WaitForRsp = false;

    parseForData_CL(pui8RxData);

    recNo++;
    if(recNo > FileRecords[fileIdx].endRec)
    {
    fileIdx++;
    recNo = FileRecords[fileIdx].startRec;

    if(fileIdx < numOfFiles)
    {
    sfiNo = FileRecords[fileIdx].sfi;
    g_eT4TState = T4T_EMV_READ_REC;
    }
    else
    {

    g_eT4TState = T4T_SELECTED_IDLE;

    //if(foundObj_CL)
    //printData();

    aidIdx = 0;
    fileIdx = 0;
    //foundObj_CL = 0;

    }

    }
    // Go Select the Capability Container

    }
    else if(sISO7816Status == ISO_7816_4_CONNECTION_WRITE_RAW_FAIL)
    {
    g_bT4WaitForRsp = false;
    g_eT4TState = T4T_ERROR;
    }
    break;
    case T4T_ERROR:
    Serial_printfLine("T4T Error");
    break;
    case T4T_SEL_CC:
    sISO7816Status = ISO_7816_4_getSelectStatus();

    if(sISO7816Status == ISO_7816_4_CONNECTION_SELECT_SUCCESS)
    {
    g_bT4WaitForRsp = false;

    // Go Read the Capability Container
    g_eT4TState = T4T_READ_CC;
    }
    else if(sISO7816Status == ISO_7816_4_CONNECTION_SELECT_FAIL)
    {
    g_bT4WaitForRsp = false;
    g_eT4TState = T4T_SELECTED_IDLE;
    }
    break;
    case T4T_READ_CC:
    sISO7816Status = ISO_7816_4_getReadStatus();

    if(sISO7816Status == ISO_7816_4_CONNECTION_READ_SUCCESS)
    {
    ISO_7816_4_getPacketStatus(&pui8RxData,&ui16RxLength);

    // MLe
    g_ui8NdefMaxReadBytes = pui8RxData[4];
    // MLc
    g_ui8NdefMaxWriteBytes = pui8RxData[6];

    // NDEF File ID
    g_pui8NDEFFileId[0] = pui8RxData[9];
    g_pui8NDEFFileId[1] = pui8RxData[10];

    // Check NDEF Read-only flag
    if(pui8RxData[14] > 0x00)
    {
    g_bNdefReadOnly = true;
    }
    else
    {
    g_bNdefReadOnly = false;
    }

    g_bT4WaitForRsp = false;

    // Check if version number is 3.0
    if(pui8RxData[2] == 0x30)
    {
    g_eT4TState = T4T_SELECTED_IDLE;
    }
    // Check if version number is 2.2
    else if(pui8RxData[2] == 0x20 || pui8RxData[2] == 0x22)
    {
    // Go Select the NDEF File
    g_eT4TState = T4T_SEL_NDEF_FILE;
    }
    else
    {
    g_eT4TState = T4T_SELECTED_IDLE;
    }
    }
    else if(sISO7816Status == ISO_7816_4_CONNECTION_READ_FAIL)
    {
    g_bT4WaitForRsp = false;
    g_eT4TState = T4T_SELECTED_IDLE;
    }
    break;
    case T4T_SEL_NDEF_FILE:
    sISO7816Status = ISO_7816_4_getSelectStatus();

    if(sISO7816Status == ISO_7816_4_CONNECTION_SELECT_SUCCESS)
    {
    g_bT4WaitForRsp = false;

    // Go Read the NDEF File length
    g_eT4TState = T4T_READ_NDEF_LEN;
    }
    else if(sISO7816Status == ISO_7816_4_CONNECTION_SELECT_FAIL)
    {
    g_bT4WaitForRsp = false;
    g_eT4TState = T4T_SELECTED_IDLE;
    }
    break;
    case T4T_READ_NDEF_LEN:
    sISO7816Status = ISO_7816_4_getReadStatus();

    if(sISO7816Status == ISO_7816_4_CONNECTION_READ_SUCCESS)
    {
    ISO_7816_4_getPacketStatus(&pui8RxData,&ui16RxLength);

    g_ui16NdefLength = (uint16_t) (pui8RxData[0] << 8) + (uint16_t) pui8RxData[1];

    g_ui16NdefRemainingBytes = g_ui16NdefLength;

    // Reset Index
    g_ui16T4TNdefIndex = 0x00;

    g_bT4WaitForRsp = false;

    // Depending on the test

    // Write Tests

    // Read Tests

    if(g_ui16NdefRemainingBytes > 0)
    {
    // Go Read the NDEF message
    g_eT4TState = T4T_READ_NDEF;
    }
    else
    {
    // When no remaining bytes we are done
    g_eT4TState = T4T_SELECTED_IDLE;
    }

    }
    else if(sISO7816Status == ISO_7816_4_CONNECTION_READ_FAIL)
    {
    g_bT4WaitForRsp = false;
    g_eT4TState = T4T_SELECTED_IDLE;
    }
    break;
    case T4T_READ_NDEF:
    sISO7816Status = ISO_7816_4_getReadStatus();

    if(sISO7816Status == ISO_7816_4_CONNECTION_READ_SUCCESS)
    {
    ISO_7816_4_getPacketStatus(&pui8RxData,&ui16RxLength);

    ui16RxLength = ui16RxLength - 2;

    // Store the NDEF in a dummy buffer
    memcpy(g_pui8T4TBuffer,pui8RxData,ui16RxLength);

    Serial_printBuffer((char *)g_pui8T4TBuffer,ui16RxLength,RW_PAYLOAD_DATA);

    // Update remaining bytes
    g_ui16NdefRemainingBytes = g_ui16NdefRemainingBytes - ui16RxLength;

    // Increase Store index
    g_ui16T4TNdefIndex = g_ui16T4TNdefIndex + ui16RxLength;

    g_bT4WaitForRsp = false;

    // When completed go to the idle state

    // Once we finish the NDEF message we are done
    if(g_ui16NdefRemainingBytes == 0)
    {
    g_eT4TState = T4T_SELECTED_IDLE;
    }
    }
    else if(sISO7816Status == ISO_7816_4_CONNECTION_READ_FAIL)
    {
    g_bT4WaitForRsp = false;
    g_eT4TState = T4T_SELECTED_IDLE;
    }
    break;
    case T4T_SELECTED_IDLE:
    break;
    case T4T_WRITE_NDEF:
    sISO7816Status = ISO_7816_4_getWriteStatus();

    if(sISO7816Status == ISO_7816_4_CONNECTION_WRITE_SUCCESS)
    {
    if(g_ui16NdefRemainingBytes == 0x00)
    {
    g_eT4TState = T4T_SELECTED_IDLE;

    Serial_printf("Write Successful!",RW_STATUS_DATA);

    pui8LenBuffer[0] = 0x0D;
    pui8LenBuffer[1] = 0x0A;
    pui8LenBuffer[2] = 0x00;

    Serial_printf((char *)pui8LenBuffer,RW_STATUS_DATA);
    }
    // Done with the test
    g_bT4WaitForRsp = false;
    }
    else if(sISO7816Status == ISO_7816_4_CONNECTION_WRITE_FAIL)
    {
    g_bT4WaitForRsp = false;
    g_eT4TState = T4T_SELECTED_IDLE;
    }
    break;
    default:
    break;
    }
    }

    // Sending a command
    if(g_bT4WaitForRsp == false)
    {
    switch(g_eT4TState)
    {
    case T4T_APP_SEL:

    if(ISO_7816_4_sendSelectApplication(AID_LIST_NFC[aidIdx], 7) == STATUS_SUCCESS)
    {
    g_bT4WaitForRsp = true;
    }

    break;

    case T4T_EMV_READ_REC_ALL:

    g_pui8ReadRec[0] = 0x00;
    g_pui8ReadRec[1] = 0xB2;
    g_pui8ReadRec[2] = recNo;
    g_pui8ReadRec[3] = (sfiNo << 3) | 0x04;
    g_pui8ReadRec[4] = 0x00;

    if(ISO_7816_4_sendAPDU(g_pui8ReadRec, 5) == STATUS_SUCCESS)
    {
    g_bT4WaitForRsp = true;
    }
    break;
    case T4T_EMV_GET_PROC:

    if(ISO_7816_4_sendAPDU(g_pui8PROC, 7 + pdolLen) == STATUS_SUCCESS)
    {
    g_bT4WaitForRsp = true;
    }

    break;
    case T4T_EMV_READ_REC:

    g_pui8ReadRec[0] = 0x00;
    g_pui8ReadRec[1] = 0xB2;
    g_pui8ReadRec[2] = recNo;
    g_pui8ReadRec[3] = (sfiNo << 3) | 0x04;
    g_pui8ReadRec[4] = 0x00;

    if(ISO_7816_4_sendAPDU(g_pui8ReadRec, 5) == STATUS_SUCCESS)
    {
    g_bT4WaitForRsp = true;
    }

    break;
    case T4T_ERROR:
    NFC_RW_triggerRWProtocolError();
    break;
    case T4T_SEL_CC:
    if(ISO_7816_4_sendSelectFile(g_pui8CCFileId,2) == STATUS_SUCCESS)
    {
    g_bT4WaitForRsp = true;
    }
    break;
    case T4T_READ_CC:
    if(ISO_7816_4_sendReadFile(0,0x0F) == STATUS_SUCCESS)
    {
    g_bT4WaitForRsp = true;
    }
    break;
    case T4T_SEL_NDEF_FILE:
    if(ISO_7816_4_sendSelectFile(g_pui8NDEFFileId,2) == STATUS_SUCCESS)
    {
    g_bT4WaitForRsp = true;
    }
    break;
    case T4T_READ_NDEF_LEN:
    if(ISO_7816_4_sendReadFile(0,0x02) == STATUS_SUCCESS)
    {
    g_bT4WaitForRsp = true;
    }
    break;
    case T4T_READ_NDEF:
    if(g_ui16NdefRemainingBytes > g_ui8NdefMaxReadBytes)
    {
    if(ISO_7816_4_sendReadFile(g_ui16T4TNdefIndex+2,g_ui8NdefMaxReadBytes) == STATUS_SUCCESS)
    {
    g_bT4WaitForRsp = true;
    }
    }
    else
    {
    if(ISO_7816_4_sendReadFile(g_ui16T4TNdefIndex+2,(uint8_t) g_ui16NdefRemainingBytes) == STATUS_SUCCESS)
    {
    g_bT4WaitForRsp = true;
    }
    }
    break;
    case T4T_SELECTED_IDLE:
    //foundObj_CL = 0;
    nameFound = 0;
    PANFound = 0;
    expDateFound = 0;
    aidIdx = 0;
    recNo = 1;
    sfiNo = 1;
    break;
    case T4T_WRITE_NDEF:
    // If the number of bytes remaining to be written is less than the max number of bytes
    if(g_ui16NdefRemainingBytes > 0)
    {
    if(g_ui16NdefRemainingBytes > (uint16_t) g_ui8NdefMaxWriteBytes)
    {

    // Clear the NDEF Len for function purpose
    if(ISO_7816_4_sendWriteFile(g_ui16T4TNdefIndex, g_ui8NdefMaxWriteBytes,&g_pui8T4TBuffer[g_ui16T4TNdefIndex]) == STATUS_SUCCESS)
    {
    g_bT4WaitForRsp = true;
    g_ui16NdefRemainingBytes = g_ui16NdefRemainingBytes - (uint16_t) g_ui8NdefMaxWriteBytes;
    }
    }
    else
    {
    // Clear the NDEF Len for function purpose
    if(ISO_7816_4_sendWriteFile(g_ui16T4TNdefIndex,(uint8_t) g_ui16NdefRemainingBytes,&g_pui8T4TBuffer[g_ui16T4TNdefIndex]) == STATUS_SUCCESS)
    {
    g_bT4WaitForRsp = true;
    g_ui16NdefRemainingBytes = 0;
    }
    }

    }
    else
    {
    g_eT4TState = T4T_SELECTED_IDLE;
    }


    break;
    default:
    break;
    }
    }

    }

  • Hello Onur,

    Before going any further here since you mention mastercard/visa...

    Are you planning to do EMVCo certification for this application?

  • At this stage, we test only reading the card number and expiration dates. If we are successful at this stage, we think in the next stages. Do you have any idea about the deficiency in the code I shared?

  • Hello Onur,

    Okay well something very key to be aware of: the TRF7970A cannot pass EMVco testing due to the errata item Device#B01: https://www.ti.com/lit/er/sloz011b/sloz011b.pdf

    As we are not suited for payment systems, we haven't done any development for that.

    As for the error, I suspect the card rejected the command that was sent - that would be the most common cause for that error. Cards will reply back when they receive an invalid command and the NFC stack will then report back a fail to the lower levels. So you will need to review the command sequence used.

    If I remember right, Mastercard and Visa had different sequences, but that was only something I looked into a bit like four years ago, haven't touched any of that in a long time to really offer more feedback unfortunately. Hope that is sufficient to get you moving forward though.

  • Hi Ralph,

    Thank you for response.

    Is this problem caused by the Device#B01 error?

    The dedicated file was sent before the AID number was sent in the image above. In the code I shared, a direct AID number is sent. Does this pose a problem?

    Have you ever applied your credit card with trf7970?I examined all the application notes, but I did not come across such an example.

    Is it certain that we will have problems in communication with credit cards due to error Device#B01? Or can this problem be overcome?

    Do you have any idea about this problem? or can you share an example?

    thank you.

  • Hello Onur,

    Onur Ilyas YAVUZ said:
    Is this problem caused by the Device#B01 error?

    Onur Ilyas YAVUZ said:
    Is it certain that we will have problems in communication with credit cards due to error Device#B01? Or can this problem be overcome?

    The errata only causes an issue for certification. And if it impacted a card at all, then you wouldn't be able to communicate at all with it.

    Onur Ilyas YAVUZ said:
    The dedicated file was sent before the AID number was sent in the image above. In the code I shared, a direct AID number is sent. Does this pose a problem?

    I don't know, we have no experience and do not support payment applications.

    Onur Ilyas YAVUZ said:
    Have you ever applied your credit card with trf7970?I examined all the application notes, but I did not come across such an example.

    No, this sort of application is not support because we cannot pass EVMco anyways.

    Unfortunately as long as this remains an application specific issue regarding how to read payment cards, you are on your own for this, it is outside of the scope of what we are able to support.

  • Hi Ralph,

    Thank you for response.

    In datasheet also includes payment systems in the field of payment application. if there is this error, it cannot be used in payment systems. why didn't you remove it from the application area?

  • Hello Onur,

    I'll raise that with our product manager. I presume the answer will be either that the section wasn't updated post-errata uncovering or that it could be used in a proprietary payment application where EMVco is not required. Though if the latter then it should be clarified as 'non-EMVco' systems.

  • Hi Ralph,

    Thank you for response.

    I measured RSSI using the NFC tool. But he detects the card from a very close distance. Is there a method to increase the detection distance?

  • Hello Onur,

    RSSI is based on signal strength, and signal strength is based on the coupling of the antennas for both tag and reader as well as output power for the reader.

    To increase output power you would need to provide the TRF7970A 5V and use 5V mode in the GUI - you would have to edit your launchpad to do so.

    Regarding coupling of antennas, the following factors apply:

    1. Antenna size
    2. Antenna coupling (i.e. the ratio of antenna sizes between reader & tag)
    3. Antenna tuning

    The DLP-7970ABP has a decent sized antenna and can work well with credit card sized tags. It is tuned to support all NFC technologies including the wider bandwidth needed for ISO14443 sidebands and centered at 13.56MHz.

    However, I have seen that some Mifare tags which are used for secure applications will sometimes be intentionally off tuned to 15-17MHz to minimize read range in order to enhance security by requiring the tag to be placed very close to the reader. It is possible that the same is done with payment cards, so then you would see lower RSSI results.

  • Ralph Jacobi said:

    To increase output power you would need to provide the TRF7970A 5V and use 5V mode in the GUI - you would have to edit your launchpad to do so.

    I set it in TRF7970 driver as follows.

    uint8_t TRF79x0_init(void)
    {
      g_ui8IrqFlag = 0x00;
      g_ui8TimeOutFlag = 0x00;
    
      g_bTRFPowerSupply5V = true;
    
      g_bTRFExtAmpEnable = false;
    
    	MOD_DIR_OUT;
    	MOD_OFF;
    
    	// Set Slave Select to output direction
    	SLAVE_SELECT_PORT_SET;
    
    	// De-assert the Slave Select
    	SLAVE_SELECT_HIGH;
    
    	//*******TODO: Create Global flag, or require User to do this in application space?
    	//Must bring I/O_2 high before Enable to start-up in SPI w/ SS mode.
    	SDM_TXENABLE_ON;
    	SDM_PORT_SET;
    	// **************************************************************
    
    
    	//
    	// The TRF79x0 requires a low to high transition on the Enable Line.
    	//
    	// Set EN = 0 on the TRF79x0
    	TRF_DISABLE;
    	// Set EN to output direction
    	ENABLE_PORT_SET;
    	// wait until system clock started
    	MCU_delayMillisecond(10);
    	// Set EN = 1 on the TRF 79xx
    	TRF_ENABLE;
    
    	//
    	// The TRF79x0 requires a low to high transition on the Enable Line.
    	//
    //	// Set EN = 0 on the TRF79x0
    //	TRF_DISABLE;
    //	TRF_DISABLE2;
    //	// Set EN to output direction
    //	ENABLE_PORT_SET;
    //	ENABLE2_PORT_SET;
    //	// wait until system clock started
    //	MCU_delayMillisecond(3);
    //
    //	TRF_DISABLE2;
    //	MCU_delayMillisecond(1);
    //	// Set EN = 1 on the TRF 79xx
    //	TRF_ENABLE;
    
    	SPI_setup();
    	//
    	// Enable an interrupt Low to High transition for the IRQ pin on the TRF7970A
    	//
    	IRQ_PIN_SET;
    	IRQ_EDGE_SET;
    	IRQ_INT_ON;
    	IRQ_CLR;
    
    //	SDM_BITCLK_PIN_SET;
    //	SDM_BITCLK_EDGE_SET;
    //	SDM_BITCLK_CLR;
    //	SDM_BITCLK_INT_ON;
    
    
    	MCU_delayMillisecond(10);
    
    	g_eTrf7970Version = TRF7970_A;
    
    	return STATUS_SUCCESS;
    }

    I connected the power input of DLP7970 to 5 volts.

    I also configured it on NFC as follows.

    Is there any other adjustment I can make?

    thank you.

  • Hello Onur,

    You have to supply 5V to the VIN pin of the DLP-7970ABP too.

    You'll need to bend the 3.3V pin for the LaunchPad so you don't fry it, and then route a wire from the 5V pin to the DLP-7970ABP VIN (pin on the BoosterPack headers).

  • Hi Ralph,

    I made the 5v connection as below.

    Do I need to do anything besides this?

  • Just verify the power is stable, hopefully it is. Usually I do a blue wire. But if it is stable then that should be it.

  • In this way, the power LED of the card is on. Apart from this configuration mentioned above, there is nothing else to do to increase the antenna detection distance, right?
  • Hello Onur,

    Presuming it is a card credit sized tag, correct. What range are you seeing?

    If you have access to a spectrum analyzer and a 3rd printer I could send you a way to measure tag resonance if you want to understand that piece. Might not be worthwhile your time but want to offer just incase.

  • Hi Ralph,

    Ralph Jacobi said:

    Hello Onur,

    Presuming it is a card credit sized tag, correct. What range are you seeing?

    The reading distance of the card is about 2-3 cm.

    Ralph Jacobi said:

    If you have access to a spectrum analyzer and a 3rd printer I could send you a way to measure tag resonance if you want to understand that piece. Might not be worthwhile your time but want to offer just incase.

    i'm happy with it. how can i measure?
  • Hi Ralph,

    Thank you for responses.

    Best regards.