NFC Tag, integrovaná SRAM a detekce pole FD [CZ]

Doporučuji jezdit NFC pidianténkou po mobilu. Také jsem s tím chvíli zápasil - anténa tagu je maličká, čili musí být přesně nad anténou v mobilu.

Jinak koukám, že NFC tu zatím prakticky nikdo neřeší a SDK má naimplementované jen základní funkce pro NDEF, tak se chci zeptat, jestli si někdo nehraje s implementací ukládání dat do té integrované SRAM namísto EEPROM a zároveň FD interruptu alespoň pro primitivní detekci, že někdo tag čte.

A jestli ne, tak to abych začal :slight_smile:

Ahoj,
kdysi jsem si stím hrál, v rámci bc-bridge do sdk pro core modul koukam se preneslo jen par veci zde sem nasel starsi kod a ta ram tam je. Interapt sem nezkousel. bc_tag_nfc.c (16.0 KB) bc_tag_nfc.h.txt (2.0 KB)

h file sem musel pridelat .txt aby se dal uplodnout.

2 Likes

Ahoj Jakube,
déky za skvělý článek. Nadchl mě a podíval jsem se víc tomu čipu pod pokličku.
Vypadá to, že signál FD není na NFC Tagu dobře zapojený a je třeba drobná HW úprava. Při návrhu tagu jsme špatně pochopili úroveň aktivního signálu a v datasheetu je přesně opačná.

Ode dneška všechny objednané “NFC Tag” už budou mít tuto hardwarovou opravu.

Oprava se provede odstraněním tranzistoru Q2 a propojením dvou padů. Poté již při detekci pole čip stáhne signál FD, který je vlastně na I2C signálem INT. Nezapomeň v Core aktivovat interní pull-up, zatím INT v SDK nepoužíváme. V bc_gpio bohužel pin INT (zatím) nemáme, takže to bude třeba přes registry
http://sdk.bigclown.com/group__bc__gpio.html

1 Like

Kdo říkal, že v SDK není podpora BC_GPIO_INT? :slight_smile:

V konzoli aktualizuj na nejnovější verzi SDK příkazem make update

A pak

bc_gpio_init(BC_GPIO_INT);
bc_gpio_set_mode(BC_GPIO_INT, BC_GPIO_MODE_INPUT);
bc_gpio_set_pull(BC_GPIO_INT, BC_GPIO_PULL_UP);

Martin

1 Like

Aha a já si říkal, proč mi to nefunguje a proč je tam asi ten tranzistůrek :-). Super, dík! A když už jsi udělal BC_GPIO_INT, nechceš ještě pro klid v duši dopsat alias BC_EXTI_LINE_INT? To je teď BC_EXTI_LINE_PC13, že?

1 Like

Ahoj, doufám že jsi s tím hledáním nertrávil moc času. Snažil jsem se na to přijít než by ses na tom zasekl :slight_smile:

Ode dneška všechny objednané “NFC Tag” už budou mít tuto hardwarovou opravu.

Vyzkoušel jsem PC_13 a funguje to

void bc_exti_callback(bc_exti_line_t exti, void * param)
{
    (void) param;

    bc_log_debug("EXTI");
}

void application_init(void)
{
    // Initialize logging
    bc_log_init(BC_LOG_LEVEL_DUMP, BC_LOG_TIMESTAMP_ABS);

    bc_gpio_init(BC_GPIO_INT);
    bc_gpio_set_mode(BC_GPIO_INT, BC_GPIO_MODE_INPUT);
    bc_gpio_set_pull(BC_GPIO_INT, BC_GPIO_PULL_UP);

    bc_exti_register(BC_EXTI_LINE_PC13, BC_EXTI_EDGE_FALLING, bc_exti_callback, NULL);
}
2 Likes