NFC internals в Android: от APDU до NCI и RF
Доклад разбирает путь чтения электронного документа с NFC-чипом в Android на сквозном кейсе: текстовые данные уже получены, а чтение фотографии из DG2 прерывается с TagLostException.
Сначала отделим этап камеры и OCR от NFC-сеанса: разберем MRZ, контрольные цифры, структуру LDS, файлы DG1, DG2 и EF.SOD, а также роль PACE или BAC в установлении secure messaging.
Затем посмотрим на APDU-команды SELECT и READ BINARY и проследим вызов IsoDep.transceive() через NfcService, JNI, native NFC stack и HAL до NFCC.
На уровне NCI разберем control и data packets, ConnID, PBF и credit flow control, а также отделим NCI fragmentation от прикладного чтения файла и ISO-DEP chaining по RF.
Отдельно обсудим discovery и activation, границу ReaderCallback и то, почему одинаковый TagLostException может скрывать timeout, deactivation, ошибку жизненного цикла приложения или нестабильную RF-связь.
На примере SDK log и NCI trace сопоставим последний подтвержденный READ BINARY с DATA_TX, RF timeout и RF_DEACTIVATE_NTF, не смешивая факты с предположениями.
Разберем, почему после неоднозначной потери ответа нельзя просто повторить ту же защищенную APDU и как безопасно восстановить чтение через новую activation и PACE/BAC-сессию.
В финале соберем практический алгоритм диагностики и A/B-тестов по модели телефона, положению документа, чехлу и размеру блока.
После доклада слушатель сможет локализовать сбой между приложением, Android NFC stack, NFCC и RF и выбрать проверку, которая подтверждает причину, а не маскирует ее.