Wiegand Intruduction Wiegand protocol is a communication protocol developed by Motorola, which is applicable to many aspects of card readers and cards related to access control system; the protocol does not define the baud rate of communication and data length. It mainly defines the data transmission mode: Data0 and data1 are used to transmit 0 and 1 respectively. They are mostly used for 26bit, 34bit, 36bit, 44bit, etc. Debugging The RS485 port of Face-RK3399 can be reused as the sending port of Wiegand protocol for data transmission. DTS configuration The Wiegand node is defined in "kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-face.dtsi": wiegand-gpio { compatible = "firefly,wiegandout"; level_effect = <1>;/*0-low effect 1-high effect*/ gpio_d0 = <&gpio1 9 GPIO_ACTIVE_HIGH>; gpio_d1 = <&gpio1 10 GPIO_ACTIVE_HIGH>; gpio_mode_switch = <&gpio1 17 GPIO_ACTIVE_HIGH>; status = "okay"; Run commands in device as follow: echo 0 > /sys/devices/platform/wiegand-gpio/mode_switch #Switch to Wiegand interface function echo [card number] > /sys/devices/platform/wiegand-gpio/wiegand26 # Sending Wiegand 26 date echo [card number] > /sys/devices/platform/wiegand-gpio/wiegand34 # sending Wiegand 34 function The following is the specific wiring method of Wigan transmission interface. Note that VCC and GND need to be provided through USB. Wiegand interface can also as GPIO: # Pull up D0 echo 1 > /sys/devices/platform/wiegand-gpio/D0 # Pull up D1 echo 1 > /sys/devices/platform/wiegand-gpio/D1 The following is the connection diagram of control relay with D0, D1, IO port. Note that VCC and GND need to be provided through USB. V2 Wiegand and relay In Face-RK3399 V2, the Wiegand interface is updated while it using expansion board. You can lookup by interface definition NOTE:GND connectting is needed V2 Wiegand output Run commands in device as follow: echo card number > /sys/devices/platform/wiegand-gpio/wiegand26 # Sending Wiegand 26 date echo card number > /sys/devices/platform/wiegand-gpio/wiegand34 # sending Wiegand 34 function V2 Wiegand input File system create the node /dev/wiegand. The following example of Wigand input program: #include #include #include #include #include #include #include #define WG_IOC_MAGIC 'k' #define WG_IOCGETFUN _IOR(WG_IOC_MAGIC, 1, int) #define WG_IOC_FUN_IN _IOR(WG_IOC_MAGIC, 2, int) //Set to normal input IO #define WG_IOC_FUN_WG _IOR(WG_IOC_MAGIC, 3, int) //Set ti Wiegand input IO #define WG_IOCGETD0 _IOR(WG_IOC_MAGIC, 4, int) //Get IO level #define WG_IOCGETD1 _IOR(WG_IOC_MAGIC, 5, int) #define WG_IOCGETWG _IOR(WG_IOC_MAGIC, 6, int) //Get Wiegand data int main() { int fd = 0; char dst[12] = { 0}; int val; int result =0; fd = open("/dev/wiegand", O_RDWR); if(fd < 0) { printf("file open error ! \n"); return -1; } while(1) { //result=read(fd, dst, sizeof(dst)); ioctl(fd, WG_IOC_FUN_WG, &val); result = ioctl(fd, WG_IOCGETWG, &val); if(result < 0) { printf("Unable to get value: %s\n", strerror(errno)); close(fd); return -1; } else printf("val is %d, size=%d\n", val,result); sleep(1); } /*close the device*/ close(fd); return 0; } The above program can receive and print the input data of Wiegand. V2 relay The relay of V2 can control two lines ON/OFF refer to interface definition echo 0 > /sys/devices/platform/wiegand-gpio/mode_switch # COM and ON connect echo 1 > /sys/devices/platform/wiegand-gpio/mode_switch # COM and OFF connect