Проблемы с wiegand

Попробую воспроизвести.
Дайте пожалуйста архив с диагностической информацией контроллера. Создание архива описано в документации.
Ну и артефакты (модуль собранный) - чтобы именно на вашем проверил.

приложен диагностический архив, доступен только сотрудникам поддержки
(308,7 КБ)

wiegand-gpio.ko (10,8 КБ)

wiegand-monitor (2,0 КБ)

Отлично, после обеда попробую.

Ядро то же:

uname -a
Linux wirenboard-AC4U5OVN 6.8.0-wb140

Копирую файл в /lib/modules/6.8.0-wb140/kernel
Выполняю

depmod -a

Проверяю. Остановил wb-mqtt-gpio, выполняю

chmod a+x wiegand-monitor
./wiegand-monitor 
Loading wiegand-gpio module...
00000 Data: 0000000000000000000000000000000000000000000000000000000000000000

Вижу:

root@wirenboard-AC4U5OVN:~# cat /sys/kernel/debug/gpio |grep A2
 gpio-119 (A2 OUT              )
 gpio-228 (A2 IN               |wiegand-d1          ) in  hi IRQ 
 gpio-513 (EC A2               )
root@wirenboard-AC4U5OVN:~# cat /sys/kernel/debug/gpio |grep A1
 gpio-133 (A1 OUT              )
 gpio-233 (A1 IN               |wiegand-d0          ) in  hi IRQ 
 gpio-512 (EC A1               )

Ну и


Попробую сделать эмулятор wiegand из ардуинки.

Да, у меня всё ровно также выглядит. Проблема только, что при считывании карты, её значение не публикуется в топик. Оно даже отсутствует в /sys/kernel/wiegand/read

Сейчас пересобираю с отладкой, смотрю. Предполагаю что дело в версии ядра.

Так, персобрал заодно модуль. Попробовал эмулятор на ардуинке.
Вот такой код:

/*
 * Wiegand 26-bit Emulator for WB8 testing
 *
 * Wiring:
 *   Arduino A1  →  WB8 A1 IN (Wiegand D0, gpio-233)
 *   Arduino A2  →  WB8 A2 IN (Wiegand D1, gpio-228)
 *   Arduino GND →  WB8 GND
 *
 * Protocol:
 *   Both lines are normally HIGH (open-drain, active LOW)
 *   D0 pulse = bit 0, D1 pulse = bit 1
 *   Pulse width ~50µs, inter-bit gap ~2ms
 *
 * 26-bit Wiegand frame:
 *   [EP][FC7..FC0][CN15..CN0][OP]
 *   EP  = even parity over bits 1-13
 *   FC  = 8-bit facility code
 *   CN  = 16-bit card number
 *   OP  = odd parity over bits 12-24
 */

#define PIN_D0   A1
#define PIN_D1   A2
#define PIN_LED  LED_BUILTIN  // pin 13, встроенный светодиод

#define PULSE_US   50    // pulse width, microseconds
#define BIT_GAP_MS  2    // gap between bits, milliseconds
#define SEND_INTERVAL_MS 2000  // send card every 2 seconds

// Test card: facility=0x12 (18), card=0x3456 (13398)
#define FACILITY_CODE  0x12
#define CARD_NUMBER    0x3456

void setup() {
  Serial.begin(9600);
  pinMode(PIN_D0, OUTPUT);
  pinMode(PIN_D1, OUTPUT);
  pinMode(PIN_LED, OUTPUT);
  digitalWrite(PIN_D0, HIGH);
  digitalWrite(PIN_D1, HIGH);
  digitalWrite(PIN_LED, LOW);
  // Мигнём 3 раза при старте
  for (int i = 0; i < 3; i++) {
    digitalWrite(PIN_LED, HIGH); delay(100);
    digitalWrite(PIN_LED, LOW);  delay(100);
  }
  Serial.println("Wiegand emulator ready.");
  Serial.print("Will send: facility=0x");
  Serial.print(FACILITY_CODE, HEX);
  Serial.print(" card=0x");
  Serial.println(CARD_NUMBER, HEX);
}

// Count number of set bits (for parity)
int countBits(uint32_t val, int nbits) {
  int count = 0;
  for (int i = 0; i < nbits; i++) {
    if (val & (1UL << i)) count++;
  }
  return count;
}

void sendPulse(int pin) {
  digitalWrite(pin, LOW);
  delayMicroseconds(PULSE_US);
  digitalWrite(pin, HIGH);
}

void sendWiegand26(uint8_t facility, uint16_t card) {
  // Build 24-bit data (without parity): [FC7..FC0][CN15..CN0]
  uint32_t data = ((uint32_t)facility << 16) | card;

  // Even parity: over upper 12 bits (FC + CN[15..8])
  int ep = countBits((data >> 12) & 0xFFF, 12) % 2;  // 0 = even, 1 = odd → send !ep
  ep = ep ? 0 : 0;  // even parity bit = 0 if count is even, 1 if odd
  int epBit = (countBits((data >> 12) & 0xFFF, 12) % 2 == 0) ? 0 : 1;

  // Odd parity: over lower 12 bits (CN[7..0] + ...)
  int opBit = (countBits(data & 0xFFF, 12) % 2 == 0) ? 1 : 0;

  // Build 26-bit frame
  uint32_t frame = ((uint32_t)epBit << 25) | (data << 1) | opBit;

  Serial.print("Sending 26-bit frame: 0x");
  Serial.print(frame, HEX);
  Serial.print(" (facility=");
  Serial.print(facility, DEC);
  Serial.print(" card=");
  Serial.print(card, DEC);
  Serial.println(")");

  digitalWrite(PIN_LED, HIGH);  // LED on — идёт передача

  // Send bits MSB first
  for (int i = 25; i >= 0; i--) {
    if (frame & (1UL << i)) {
      sendPulse(PIN_D1);  // bit 1
    } else {
      sendPulse(PIN_D0);  // bit 0
    }
    delay(BIT_GAP_MS);
  }

  digitalWrite(PIN_LED, LOW);   // LED off — передача завершена
}

void loop() {
  sendWiegand26(FACILITY_CODE, CARD_NUMBER);
  delay(SEND_INTERVAL_MS);
}

Ничего не вижу.

Выгрузил модуль, запустил опять wb-mqtt-gpio.
Начал пробовать (разные) по длительности импульсы на вход A1
В процессе даже пайплайн построил, ардуинка подключена к контроллеру по usb, заливаю на нее прошивку так:

scp  /tmp/gpio-pulse-test-build/gpio-pulse-test.ino.hex root@10.0.0.85:/tmp/gpio-pulse-test.hex && \
ssh  root@10.0.0.85  "avrdude -patmega328p -carduino -P/dev/ttyUSB0 -b115200 -D -Uflash:w:/tmp/gpio-pulse-test.hex:i 2>&1 | tail -4"

Но это, по сути, неважно.
Так как грань удачной детекции получается вот с такими параметрами:

/*
 * GPIO Pulse Test
 *
 * Тест минимально воспринимаемой длительности сигнала входом WB8.
 * A1 Arduino → A1 IN WB8 (gpio-233)
 *
 * Выход A1 и встроенный светодиод меняются синхронно:
 *   50 мкс LOW  (активный сигнал — светодиод горит)
 *   2 мс   HIGH (пауза          — светодиод гаснет)
 */

#define PIN_OUT  A1
#define PIN_LED  LED_BUILTIN

#define PULSE_LOW_US   200   // длительность LOW, микросекунды
#define PAUSE_HIGH_MS  10    // длительность HIGH, миллисекунды

void setup() {
  Serial.begin(9600);
  pinMode(PIN_OUT, OUTPUT);
  pinMode(PIN_LED, OUTPUT);
  digitalWrite(PIN_OUT, HIGH);
  digitalWrite(PIN_LED, LOW);
  Serial.println("GPIO pulse test ready.");
  Serial.print("LOW: ");
  Serial.print(PULSE_LOW_US);
  Serial.print(" us  HIGH: ");
  Serial.print(PAUSE_HIGH_MS);
  Serial.println(" ms");
}

void loop() {
  // Активный импульс: LOW + LED ON
  digitalWrite(PIN_OUT, LOW);
  digitalWrite(PIN_LED, HIGH);
  delayMicroseconds(PULSE_LOW_US);

  // Пауза: HIGH + LED OFF
  digitalWrite(PIN_OUT, HIGH);
  digitalWrite(PIN_LED, LOW);
  delay(PAUSE_HIGH_MS);
}

импульс (низкое состояние) не меньше 200мкс
При этом он детектится нечасто, раз в несколько секунд:

Mar 11 13:35:25 /devices/wb-gpio/controls/A1_IN 1
Mar 11 13:35:28 /devices/wb-gpio/controls/A1_IN 0
Mar 11 13:35:28 /devices/wb-gpio/controls/A1_IN 1
Mar 11 13:35:28 /devices/wb-gpio/controls/A1_IN 0
Mar 11 13:35:28 /devices/wb-gpio/controls/A1_IN 1
Mar 11 13:35:30 /devices/wb-gpio/controls/A1_IN 0
Mar 11 13:35:30 /devices/wb-gpio/controls/A1_IN 1
Mar 11 13:35:33 /devices/wb-gpio/controls/A1_IN 0
Mar 11 13:35:33 /devices/wb-gpio/controls/A1_IN 1
Mar 11 13:35:35 /devices/wb-gpio/controls/A1_IN 0
Mar 11 13:35:36 /devices/wb-gpio/controls/A1_IN 1
Mar 11 13:35:37 /devices/wb-gpio/controls/A1_IN 0
Mar 11 13:35:37 /devices/wb-gpio/controls/A1_IN 1
Mar 11 13:35:38 /devices/wb-gpio/controls/A1_IN 0
Mar 11 13:35:38 /devices/wb-gpio/controls/A1_IN 1
Mar 11 13:35:38 /devices/wb-gpio/controls/A1_IN 0
Mar 11 13:35:38 /devices/wb-gpio/controls/A1_IN 1
Mar 11 13:35:39 /devices/wb-gpio/controls/A1_IN 0
Mar 11 13:35:39 /devices/wb-gpio/controls/A1_IN 1
Mar 11 13:35:40 /devices/wb-gpio/controls/A1_IN 0
Mar 11 13:35:40 /devices/wb-gpio/controls/A1_IN 1

Пойду к коллегам посоветуюсь.
Весьма похоже что на актуальных контроллерах WB8 в которых часть gpio управляется EC работать не будет.
Спрошу у коллег.

Не удалось выяснить?

Похоже дело все ж в модуле.
Добавил debug вывод:

[74338.713130] wiegand-gpio: irq=229 src=D0 dt_us=998923 bit=0 d0=0 d1=1
[74338.760630] Missed ticks 12
[74338.789827] wiegand-gpio: unexpected package len [1]
[74338.853311] Missed ticks 8
[74338.882362] Missed ticks 2
[74339.016706] Missed ticks 12
[74339.045113] Missed ticks 2
[74339.077429] Missed ticks 2
[74339.202650] Missed ticks 12
[74339.231047] Missed ticks 2
[74339.263368] Missed ticks 2
[74339.388571] Missed ticks 11
[74339.418852] Missed ticks 2
[74339.450941] Missed ticks 3
[74339.584351] Missed ticks 12
[74339.612706] Missed ticks 2
[74339.645038] Missed ticks 2
[74339.712035] wiegand-gpio: irq=229 src=D0 dt_us=998924 bit=0 d0=0 d1=1
[74339.770203] wiegand-gpio: unexpected package len [1]
[74339.829596] Missed ticks 18
[74339.858521] Missed ticks 1
[74339.891955] Missed ticks 3
[74340.024197] Missed ticks 12
[74340.054247] Missed ticks 2
[74340.085988] Missed ticks 2
[74340.212202] Missed ticks 12
[74340.240569] Missed ticks 2
[74340.272889] Missed ticks 2
[74340.398062] Missed ticks 11
[74340.428927] Missed ticks 2
[74340.463310] Missed ticks 3
[74340.593829] Missed ticks 12
[74340.624060] Missed ticks 2
[74340.658108] Missed ticks 2
[74340.661282] wiegand-gpio: irq=229 src=D0 dt_us=949251 bit=0 d0=0 d1=1
[74340.789608] wiegand-gpio: unexpected package len [1]

Сейчас исследую дальше.
То есть цель исследования, на текущем этапе - определить, опознаются ли котроткие импульсы.
Уже окружение CI/CD сделал, проще стало.

1 лайк

Потыкал осциллографом. Дело, все ж в входных цепях. Схемотехника входов A[1..4] в WB8:
резистор 100кОм, затем конденсатор 4700 на землю. Вот этот RC фильтр и режет короткие импульсы.
То есть импульсы короче 200мкс не проходят, шанс около 5%.
Для проверки увеличил длину импульсов на эмуляторе до 200мкс и получил “корректное” (но с неверными, не соответствующими переданному) результатами

[78295.888245] wiegand-gpio: irq=229 src=D0 dt_us=2019782 bit=0 d0=0 d1=0
[78295.898974] wiegand-gpio: irq=229 src=D0 dt_us=10736 bit=1 d0=0 d1=0
[78295.918196] wiegand-gpio: irq=229 src=D0 dt_us=19222 bit=2 d0=0 d1=0
[78295.952217] wiegand-gpio: irq=224 src=D1 dt_us=34020 bit=3 d0=0 d1=0
[78295.952230] wiegand-gpio: irq=229 src=D0 dt_us=14 bit=4 d0=0 d1=0
[78295.952639] wiegand-gpio: irq=229 src=D0 dt_us=407 bit=4 d0=0 d1=0
[78295.963368] wiegand-gpio: irq=224 src=D1 dt_us=10729 bit=5 d0=0 d1=0
[78295.974109] wiegand-gpio: irq=229 src=D0 dt_us=10741 bit=6 d0=0 d1=0
[78295.984821] wiegand-gpio: irq=229 src=D0 dt_us=10711 bit=7 d0=0 d1=0
[78295.995595] wiegand-gpio: irq=229 src=D0 dt_us=10773 bit=8 d0=0 d1=0
[78296.006366] wiegand-gpio: irq=224 src=D1 dt_us=10772 bit=9 d0=0 d1=0
[78296.017139] wiegand-gpio: irq=224 src=D1 dt_us=10773 bit=10 d0=0 d1=0
[78296.027913] wiegand-gpio: irq=229 src=D0 dt_us=10773 bit=11 d0=0 d1=0
[78296.038685] wiegand-gpio: irq=224 src=D1 dt_us=10772 bit=12 d0=0 d1=0
[78296.049460] wiegand-gpio: irq=229 src=D0 dt_us=10774 bit=13 d0=0 d1=0
[78296.060239] wiegand-gpio: irq=229 src=D0 dt_us=10776 bit=14 d0=0 d1=0
[78296.071014] wiegand-gpio: irq=229 src=D0 dt_us=10774 bit=15 d0=0 d1=0
[78296.081776] wiegand-gpio: irq=224 src=D1 dt_us=10767 bit=16 d0=0 d1=0
[78296.092557] wiegand-gpio: irq=229 src=D0 dt_us=10776 bit=17 d0=0 d1=0
[78296.103330] wiegand-gpio: irq=224 src=D1 dt_us=10773 bit=18 d0=0 d1=0
[78296.114102] wiegand-gpio: irq=229 src=D0 dt_us=10772 bit=19 d0=0 d1=0
[78296.124874] wiegand-gpio: irq=224 src=D1 dt_us=10772 bit=20 d0=0 d1=0
[78296.135617] wiegand-gpio: irq=224 src=D1 dt_us=10742 bit=21 d0=0 d1=0
[78296.146412] wiegand-gpio: irq=229 src=D0 dt_us=10784 bit=22 d0=0 d1=0
[78296.157169] wiegand-gpio: irq=229 src=D0 dt_us=10764 bit=23 d0=0 d1=0
[78296.214594] wiegand-gpio: frame-end bits=24 raw=14 68 ac
[78296.214623] wiegand-gpio: frame-valid bits=24 data=000101000110100010101100

Код эмулятора:

/*
 * Wiegand 26-bit Emulator for WB8 testing
 *
 * Wiring:
 *   Arduino A1  →  WB8 A1 IN (Wiegand D0, gpio-233)
 *   Arduino A2  →  WB8 A2 IN (Wiegand D1, gpio-228)
 *   Arduino GND →  WB8 GND
 *
 * Protocol:
 *   Both lines are normally HIGH (push-pull, active LOW)
 *   D0 pulse = bit 0, D1 pulse = bit 1
 *   Pulse width ~50us, inter-bit gap ~2ms
 *
 * 26-bit Wiegand frame:
 *   [EP][FC7..FC0][CN15..CN0][OP]
 *   EP  = even parity over bits 1-13
 *   FC  = 8-bit facility code
 *   CN  = 16-bit card number
 *   OP  = odd parity over bits 12-24
 */

#define PIN_D0   A1
#define PIN_D1   A2
#define PIN_LED  LED_BUILTIN  // pin 13, встроенный светодиод

#define PULSE_US           200U    // pulse width, microseconds
#define BIT_GAP_US       10000U    // gap between bits, microseconds
#define LINE_SETTLE_US     200U    // idle HIGH time before each bit
#define FRAME_GAP_MS        20U    // idle gap before a new frame
#define SEND_INTERVAL_MS  2000U    // send card every 2 seconds

// Test card: facility=0x12 (18), card=0x3456 (13398)
#define FACILITY_CODE  0x12
#define CARD_NUMBER    0x3456

void setup() {
  Serial.begin(9600);
  pinMode(PIN_D0, OUTPUT);
  pinMode(PIN_D1, OUTPUT);
  pinMode(PIN_LED, OUTPUT);
  digitalWrite(PIN_D0, HIGH);
  digitalWrite(PIN_D1, HIGH);
  digitalWrite(PIN_LED, LOW);
  // Мигнём 3 раза при старте
  for (int i = 0; i < 3; i++) {
    digitalWrite(PIN_LED, HIGH); delay(100);
    digitalWrite(PIN_LED, LOW);  delay(100);
  }
  Serial.println("Wiegand emulator ready.");
  Serial.print("Will send: facility=0x");
  Serial.print(FACILITY_CODE, HEX);
  Serial.print(" card=0x");
  Serial.println(CARD_NUMBER, HEX);
}

// Count number of set bits (for parity)
int countBits(uint32_t val, int nbits) {
  int count = 0;
  for (int i = 0; i < nbits; i++) {
    if (val & (1UL << i)) count++;
  }
  return count;
}

void sendPulse(int pin) {
  digitalWrite(PIN_D0, HIGH);
  digitalWrite(PIN_D1, HIGH);
  delayMicroseconds(LINE_SETTLE_US);

  digitalWrite(pin, LOW);
  delayMicroseconds(PULSE_US);
  digitalWrite(pin, HIGH);
}

void sendBit(int bitIndex, int bitValue) {
  Serial.print("Bit ");
  Serial.print(25 - bitIndex);
  Serial.print(": ");
  Serial.println(bitValue);

  if (bitValue) {
    sendPulse(PIN_D1);
  } else {
    sendPulse(PIN_D0);
  }

  delayMicroseconds(BIT_GAP_US);
}

void sendWiegand26(uint8_t facility, uint16_t card) {
  // Build 24-bit data (without parity): [FC7..FC0][CN15..CN0]
  uint32_t data = ((uint32_t)facility << 16) | card;
  uint16_t upper12 = (data >> 12) & 0x0FFF;
  uint16_t lower12 = data & 0x0FFF;

  // Even parity: over upper 12 bits (FC + CN[15..8])
  int epBit = (countBits(upper12, 12) % 2 == 0) ? 0 : 1;

  // Odd parity: over lower 12 bits (CN[7..0] + ...)
  int opBit = (countBits(lower12, 12) % 2 == 0) ? 1 : 0;

  // Build 26-bit frame
  uint32_t frame = ((uint32_t)epBit << 25) | (data << 1) | opBit;

  Serial.print("Sending 26-bit frame: 0x");
  Serial.print(frame, HEX);
  Serial.print(" (facility=");
  Serial.print(facility, DEC);
  Serial.print(" card=");
  Serial.print(card, DEC);
  Serial.println(")");

  digitalWrite(PIN_LED, HIGH);  // LED on — идёт передача
  digitalWrite(PIN_D0, HIGH);
  digitalWrite(PIN_D1, HIGH);
  delay(FRAME_GAP_MS);

  // Send bits MSB first
  for (int i = 25; i >= 0; i--) {
    sendBit(i, (frame & (1UL << i)) ? 1 : 0);
  }

  digitalWrite(PIN_LED, LOW);   // LED off — передача завершена
}

void loop() {
  sendWiegand26(FACILITY_CODE, CARD_NUMBER);
  delay(SEND_INTERVAL_MS);
}

Предварительный вывод: дело в схемотехнике.
Пожалуй, проще всего, использовать wiegand/modbus шлюз.
Либо подключиться к порту расширения, внутреннему. Но порт не толерантен к уровням 5 вольт.

1 лайк

Понял вас. Большое спасибо, что прояснили ситуацию

Да, еще вариант: использовать 1-wire входы. На них нет конденсаторов.
Сейчас проверю, раз уж занялся.

Выгружаю все от 1-wire, загружаю модуль

insmod /lib/modules/6.8.0-wb140/kernel/drivers/misc/wiegand-gpio.ko D0=108 D1=120 debug=1

Эмулятор подключен W1 (D0), W2(D1)
Получаю:

[81523.596429] wiegand-gpio: irq=104 src=D0 dt_us=2021318 bit=0 d0=1 d1=1
[81523.598890] wiegand-gpio: irq=104 src=D0 dt_us=2465 bit=1 d0=1 d1=1
[81523.608564] wiegand-gpio: irq=104 src=D0 dt_us=9674 bit=2 d0=1 d1=1
[81523.629348] wiegand-gpio: irq=104 src=D0 dt_us=20784 bit=3 d0=1 d1=1
[81523.653779] wiegand-gpio: irq=116 src=D1 dt_us=24431 bit=4 d0=1 d1=1
[81523.686104] wiegand-gpio: irq=104 src=D0 dt_us=32325 bit=5 d0=1 d1=1
[81523.718348] wiegand-gpio: irq=116 src=D1 dt_us=32244 bit=6 d0=1 d1=1
[81523.728062] wiegand-gpio: irq=116 src=D1 dt_us=9703 bit=7 d0=1 d1=1
[81523.739475] wiegand-gpio: irq=104 src=D0 dt_us=11412 bit=8 d0=1 d1=1
[81523.750913] wiegand-gpio: irq=104 src=D0 dt_us=11440 bit=9 d0=1 d1=1
[81523.762315] wiegand-gpio: irq=104 src=D0 dt_us=11409 bit=10 d0=1 d1=1
[81523.785171] wiegand-gpio: irq=104 src=D0 dt_us=22857 bit=11 d0=1 d1=1
[81523.808028] wiegand-gpio: irq=104 src=D0 dt_us=22857 bit=12 d0=1 d1=1
[81523.830888] wiegand-gpio: irq=116 src=D1 dt_us=22859 bit=13 d0=1 d1=1
[81523.842301] wiegand-gpio: irq=104 src=D0 dt_us=11412 bit=14 d0=1 d1=1
[81523.871988] wiegand-gpio: irq=104 src=D0 dt_us=29688 bit=15 d0=1 d1=1
[81523.997175] wiegand-gpio: frame-end bits=16 raw=0b 04
[81523.997192] wiegand-gpio: frame-valid bits=16 data=0000101100000100
[81525.875040] wiegand-gpio: irq=104 src=D0 dt_us=2003075 bit=0 d0=1 d1=1
[81525.884546] wiegand-gpio: irq=104 src=D0 dt_us=9512 bit=1 d0=1 d1=1
[81525.916862] wiegand-gpio: irq=104 src=D0 dt_us=32317 bit=2 d0=1 d1=1
[81525.949101] wiegand-gpio: irq=116 src=D1 dt_us=32239 bit=3 d0=1 d1=1
[81525.949130] wiegand-gpio: irq=104 src=D0 dt_us=28 bit=4 d0=1 d1=1
[81525.949529] wiegand-gpio: irq=104 src=D0 dt_us=396 bit=4 d0=1 d1=1
[81525.960943] wiegand-gpio: irq=104 src=D0 dt_us=11411 bit=5 d0=1 d1=1
[81525.972379] wiegand-gpio: irq=116 src=D1 dt_us=11442 bit=6 d0=1 d1=1
[81525.983794] wiegand-gpio: irq=116 src=D1 dt_us=11414 bit=7 d0=1 d1=1
[81525.995236] wiegand-gpio: irq=104 src=D0 dt_us=11443 bit=8 d0=1 d1=1
[81526.006650] wiegand-gpio: irq=116 src=D1 dt_us=11414 bit=9 d0=1 d1=1
[81526.018094] wiegand-gpio: irq=104 src=D0 dt_us=11444 bit=10 d0=1 d1=1
[81526.029509] wiegand-gpio: irq=104 src=D0 dt_us=11415 bit=11 d0=1 d1=1
[81526.052368] wiegand-gpio: irq=116 src=D1 dt_us=22858 bit=12 d0=1 d1=1
[81526.075223] wiegand-gpio: irq=116 src=D1 dt_us=22856 bit=13 d0=1 d1=1
[81526.102922] wiegand-gpio: irq=116 src=D1 dt_us=27698 bit=14 d0=1 d1=1
[81526.135153] wiegand-gpio: irq=104 src=D0 dt_us=32232 bit=15 d0=1 d1=1
[81526.135163] wiegand-gpio: irq=116 src=D1 dt_us=10 bit=16 d0=1 d1=1
[81526.228168] wiegand-gpio: frame-end bits=16 raw=13 4e
[81526.228180] wiegand-gpio: frame-valid bits=16 data=0001001101001110
[81528.153655] wiegand-gpio: irq=104 src=D0 dt_us=2018512 bit=0 d0=1 d1=1
[81528.158615] wiegand-gpio: irq=104 src=D0 dt_us=4967 bit=1 d0=1 d1=1
[81528.190346] wiegand-gpio: irq=104 src=D0 dt_us=31732 bit=2 d0=1 d1=1
[81528.190372] wiegand-gpio: irq=116 src=D1 dt_us=26 bit=3 d0=1 d1=1
[81528.196971] wiegand-gpio: irq=104 src=D0 dt_us=6600 bit=3 d0=1 d1=1
[81528.217752] wiegand-gpio: irq=104 src=D0 dt_us=20781 bit=4 d0=1 d1=1
[81528.228128] wiegand-gpio: irq=104 src=D0 dt_us=10375 bit=5 d0=1 d1=1
[81528.239573] wiegand-gpio: irq=104 src=D0 dt_us=11444 bit=6 d0=1 d1=1
[81528.250986] wiegand-gpio: irq=116 src=D1 dt_us=11414 bit=7 d0=1 d1=1
[81528.273845] wiegand-gpio: irq=104 src=D0 dt_us=22859 bit=8 d0=1 d1=1
[81528.296704] wiegand-gpio: irq=104 src=D0 dt_us=22858 bit=9 d0=1 d1=1
[81528.316791] wiegand-gpio: irq=104 src=D0 dt_us=20087 bit=10 d0=1 d1=1
[81528.349134] wiegand-gpio: irq=104 src=D0 dt_us=32343 bit=11 d0=1 d1=1
[81528.349145] wiegand-gpio: irq=116 src=D1 dt_us=11 bit=12 d0=1 d1=1
[81528.365275] wiegand-gpio: irq=104 src=D0 dt_us=16119 bit=12 d0=1 d1=1
[81528.376723] wiegand-gpio: irq=116 src=D1 dt_us=11445 bit=13 d0=1 d1=1
[81528.388131] wiegand-gpio: irq=116 src=D1 dt_us=11411 bit=14 d0=1 d1=1
[81528.410992] wiegand-gpio: irq=104 src=D0 dt_us=22859 bit=15 d0=1 d1=1
[81528.464376] wiegand-gpio: frame-end bits=16 raw=01 06
[81528.464396] wiegand-gpio: frame-valid bits=16 data=0000000100000110


результат со стандартными длительностями импульсов лучше. Но чтение нестабильно.
В общем требуется участие настоящего разработчика, способного в ядро.
То есть простая сборка модуля предназначеного для ядра 4 под 6 ядро (по моему) не срабатывает.
Попрошу разработчиков глянуть.

1 лайк