Transfer 2kb via NFC - PN532 Elechouse

My first post! :slight_smile:

Dear Arduino team I have an enquiry and hoping to get some help from the experts!

I connected my microcontroller with Elechouse NFC (https://www.elechouse.com/elechouse/index.php?main_page=product_info&cPath=90_93&products_id=2276&zenid=j6nqrsdrq94jaq3ifp87gk9bm0)
and succesfully read tags and transferred data to a mobile application.

Using Peer to Peer i can transfer fine using the following code(android beam) data less than 244 bytes, but for my project I need to be able to transfer up to 3-4kb of data to the phone.
Is there any limitation? Is there any way I can change this to transfer NDEFMessages of 3-4kb size?

#include "SPI.h"
#include "PN532_SPI.h"
#include "snep.h"
#include "NdefMessage.h"

#define SD_MISO 13
#define SD_MOSI 14
#define SD_SCK 17
#define SD_CS 23
#define NDEF_DEBUG 1

#define MAX_NDEF_RECORDS 30

SPIClass sd_spi(HSPI);
PN532_SPI pn532spi(sd_spi, SD_CS);
SNEP nfc(pn532spi);
uint8_t ndefBuf[2055];

void setup()
{
    Serial.begin(115200);
    Serial.println("-------Peer to Peer--------");
    sd_spi.begin(SD_SCK, SD_MISO, SD_MOSI, SD_CS);
}

void loop()
{
    NdefMessage intromessage = NdefMessage();
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    intromessage.addMimeMediaRecord("text/plain", "e@");
    
    int messageSizeIntro = intromessage.getEncodedSize();
    
    if (messageSizeIntro > sizeof(ndefBuf)) {
        Serial.println("ndefBuf is too small!!!");
        while (1) {
        }
    }
    intromessage.encode(ndefBuf);
    Serial.print("Sending message intro...");
    int result = nfc.write(ndefBuf, messageSizeIntro,3000);
    Serial.print("MessageSize:"); Serial.println(messageSizeIntro);
    if (0 >= result) 
    {
        Serial.print("error");
        Serial.print(" - Failed Intro! - ");
        Serial.println(result);
    }

}

I tried splitting it to more records but still I get the same issue. It looks like its failing at this point in the SNEP.CPP library.

if (0 >= llcp.write(headerBuf, 6, buf, len)) {
		Serial.println("error - llcp.write()");
		return -3;
	}

Thank you for your help!!

Ok looks like message cannot be larger than 244 bytes from the comment in SNEP library..

Has anyone succesfully transferred data larger than 244 bytes using Peer to Peer?

Thank you

// check message's length
	uint32_t length = (buf[2] << 24) + (buf[3] << 16) + (buf[4] << 8) + buf[5];
	// length should not be more than 244 (header + body < 255, header = 6 + 3 + 2)

may i know if the microcontroller you connect to is a ESP8266?