Попробую воспроизвести.
Дайте пожалуйста архив с диагностической информацией контроллера. Создание архива описано в документации.
Ну и артефакты (модуль собранный) - чтобы именно на вашем проверил.
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 сделал, проще стало.
Потыкал осциллографом. Дело, все ж в входных цепях. Схемотехника входов 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-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 ядро (по моему) не срабатывает.
Попрошу разработчиков глянуть.
