У меня есть программа на C#, основанная на unfc.codeplex.com, для настройки PN532 module (connected via USB To TTL CH340G Converter) в режиме эмуляции карты. Im использует dotnet SerialPort класс для связи с модулем. Когда я нахожу свой телефон над модулем, телефон начинает вибрировать и пытается обнаружить карту/модуль, но он не обнаруживает последовательно. Иногда он обнаруживается, но это не происходит последовательно. Я узнал соответствующие шестнадцатеричные коды, проанализировав трафик последовательного порта на Stollmann nfcplayer, который отлично работает для режима эмуляции карты.PN532 Ошибка определения эмуляции карты NFC
Есть ли у кого-нибудь идеи, что не так с кодом? Или что-то не так с этим подходом?
Преамбула, почта, длина и контрольная сумма и другие пакетные данные, добавленные в методе «ex». Ниже выполняется до резьбы обнаружения
byte[] cmd0 = { 0x14, 0x01, 0x00, 0x01 };
this.pn532.ex(cmd0);
byte[] cmd1 = { 0x32, 0x02, 0x00, 0x0F, 0x0A };
this.pn532.ex(cmd1);
byte[] cmd2 = { 0x32, 0x05, 0xFF, 0xFF, 0xFF };
this.pn532.ex(cmd2);
После работает внутри нити
private void HCEDetectionThread()
{
while (this.isRunning)
{
byte[] cmd1 = { 0x8C, 0x05, 0x04, 0x00, 0x14, 0x44, 0x3A,
0x20, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14,
0x44, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00 };
this.pn532.ex(cmd1);
byte[] cmd2 = { 0x14, 0x01, 0x00, 0x01 };
this.pn532.ex(cmd2);
byte[] cmd3 = { 0x32, 0x01, 0x00 };
this.pn532.ex(cmd3);
}
}
Я добавил 400 миллисекунд, но все равно не повезло. Я вижу много запросов IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS) и IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK). Любая идея, как свести к минимуму? – Lanka