2014-12-17 9 views
1

У меня есть программа на 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); 

     } 
    } 

ответ

0

Если HCEDetectionThread постоянно посылает кадры к PN532. Чип NFC редко успевает установить соединение. Вот почему он терпит неудачу.

Попробуйте добавить паузу в диапазоне от 100 до 300 миллисекунд после последнего кадра.

Кстати, вы должны дать библиотеке Stollmann попробовать. Это не так дорого, и в конечном итоге это может быть дешевле в целом. В нее входило около 20 человеко-лет разработки, и все небольшие причуды и проблемы, с которыми вы столкнетесь позже в своем проекте, уже решены.

Disclamer: Я работал на Stollmann и провел 3,5 года в полном объеме именно в этом стеке NFC.

+0

Я добавил 400 миллисекунд, но все равно не повезло. Я вижу много запросов IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS) и IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK). Любая идея, как свести к минимуму? – Lanka

Смежные вопросы