Mifare Ultralight Coil design hints
The mifare Ultralight chip is available in two versions: either the “standard” version MF0ICU10 with an input capacitance of approximately 17pF or a high capacitance
version MF0ICU11 with approximately 50pF. For a complete coil design please refer to
the “mifare (Card) Coil Design Guide” [M011731]. Using the standard version of the mifare Ultralight chip it’s recommended to use the same coil design for the mifare Ultralight as for the mifare Classic. Although the mifare Ultralight has a slightly higher capacitance than the mifare Classic (by 0.5pF), the same coil design should be used to result in a slightly lower resonance frequency. This lower resonance frequency increases the overall performance of cheap antennas and ensures a similar performance compared to mifare Classic – but has its limitation, if multiple cards operate simultaneously in the field.

delivery types
The mifare Ultralight is available in a bumped version for flip chip assembly and in the
NXP Flip Chip Package FCP2. For coil design issues it’s recommended to use the NXP application notes “mifare (Card) Coil Design Guide” [M011731] and
“Temperature Management, Inlet Design” [sl070010].

MF RC171 low level library extension: Cascade Anticollision
/****************************************************************************/
int CALL_CONV MfPiccCascAnticoll (unsigned char select_code,
unsigned char bcnt,
unsigned char *snr)
/****************************************************************************/
{
int status;
unsigned char snr_chk = 0;
int i;
if (MfAssertMode(select_code,0×93|0×95|0×97))
return (MI_WRONG_PARAMETER_VALUE);
MfOutp(ENABLE, _PEN | _PRE); // CRC-disable, Parity enable
MfOutp(MODE , __mode); // __mode preset
MfOutp(BCNTS ,(unsigned char)(bcnt + 16)); // 16 + number of
bits
MfOutp(STACON, (unsigned char)(__stacon|_AC)); // anticollisionmode
MfDelay50us(4); // BUS-access not allowed
// for 35us
MfOutp(DATA, select_code); // “SELTYPE” of MIFARE1
MfOutp(DATA, (unsigned char)(((2 + (bcnt >> 3)) << 4) | (bcnt &
0×07)));
// bytecount higher nibble
// bitcount lower nibble
// incl. first 2 bytes!!
for (i = 0; i < (bcnt + 7)/8; i++)
{
MfOutp(DATA, snr[i] );
}
MfOutp(TOC, TIMEOUT_14443_3); // set timeout
while (!((status = MfInp(STACON)) & _DV));
MfOutp(TOC, 0); // reset timer
if ((status = MfInp(STACON)) & (_TE | _BE)) // any error
{
if (status & _TE)
return (MI_NOTAGERR);
if (status & _BE)
{
MfDelay50us(10); // delay 500us
return (MI_BITCOUNTERR);
}
}
for (i = 0; i < 4; i++)
{
snr[i] = MfInp(DATA);
snr_chk ^= snr[i];
}
snr_chk ^= MfInp(DATA);
// serialnumber check
if (snr_chk)
return (MI_SERNRERR);
return (MI_OK);
}

MF CM200 / CM500 low level library extension: Cascade Anticollison
/****************************************************************************/
int CALL_CONV MfPiccCascAnticoll (unsigned char select_code,
unsigned char bcnt,
unsigned char *snr)
/****************************************************************************/
{
int status;
unsigned char snr_chk = 0;
int i;
if (MfAssertMode(select_code,0×93|0×95|0×97))
return (MI_WRONG_PARAMETER_VALUE);
MfOutp(ENABLE, _PEN | _PRE); // CRC-disable, Parity enable
MfOutp(MODE , __mode); // __mode preset
MfOutp(BCNTS ,(unsigned char)(bcnt + 16)); // 16 + number of
bits
MfOutp(STACON, (unsigned char)(__stacon|_AC)); // anticollisionmode
MfDelay50us(4); // BUS-access not allowed
// for 35us
MfOutp(DATA, select_code); // “SELTYPE” of MIFARE1
MfOutp(DATA, (unsigned char)(((2 + (bcnt >> 3)) << 4) | (bcnt &
0×07)));
// bytecount higher nibble
// bitcount lower nibble
// incl. first 2 bytes!!
for (i = 0; i < (bcnt + 7)/8; i++)
{
MfOutp(DATA, snr[i] );
}
MfOutp(TOC, TIMEOUT_14443_3); // set timeout
while (!((status = MfInp(STACON)) & _DV));
MfOutp(TOC, 0); // reset timer
if ((status = MfInp(STACON)) & (_TE | _BE)) // any error
{
if (status & _TE)
return (MI_NOTAGERR);
if (status & _BE)
{
MfDelay50us(10); // delay 500us
return (MI_BITCOUNTERR);
}
}
for (i = 0; i < 4; i++)
{
snr[i] = MfInp(DATA);
snr_chk ^= snr[i];
}
snr_chk ^= MfInp(DATA);
// serialnumber check
if (snr_chk)
return (MI_SERNRERR);
return (MI_OK);
}