Skip to content

Instantly share code, notes, and snippets.

@jacekkow
Created July 23, 2020 22:50
Show Gist options
  • Save jacekkow/8acf2bbc164dc377df9913a47807d589 to your computer and use it in GitHub Desktop.
Save jacekkow/8acf2bbc164dc377df9913a47807d589 to your computer and use it in GitHub Desktop.
ControlVault3 initialization procedure
idVendor 0x0A5C
idProduct 0x5843
Interface 4 - Application-Specific
EP 1 IN
EP 1 OUT
EP 5 IN
Interface 5 - Smart Card
EP 2 IN
EP 2 OUT
EP 6 IN
Interface 6 - Smart Card
EP 3 IN
EP 3 OUT
EP 7 IN
Interface 7 - Vendor Specific
EP 4 IN
EP 4 OUT
EP 8 IN
Legend:
> - New outgoing message (beginning)
>> - Message continuation (division for readability)
< - New incoming message (beginning)
<< - Message continuation (division for readability)
# CTRL - Control endpoint communication (bmRequestType, bRequest, wValue, wIndex)
Communication via Endpoint 4
##########
TURNING ON
##########
# CTRL 0x41 0x01 0x0000 0x0003
> 01 00 00 04
01 = SPI_MASTER
00 = NO_CRC
00 04 = size
>> 20 00 01 00
20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
00 = NCI_MSG_CORE_RESET
01 = NCI_CORE_PARAM_SIZE_RESET
00 = NCI_RESET_TYPE_KEEP_CFG
< 00 00 00 06
00 = SPI_SLAVE
00 = NO_CRC
00 06 = size
<< 40 00 03 00 10 00
40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
00 = NCI_MSG_CORE_RESET
03 = NCI_CORE_PARAM_SIZE_RESET_RSP
00 = NCI_STATUS_OK
10 = NCI_VERSION (1.0)
00 = NCI_RESET_STATUS_KEPT_CFG
# CTRL 0x41 0x01 0x0001 0x0003
# CTRL 0x41 0x00 0x0000 0x0003
# CTRL 0x41 0x00 0x0001 0x0003
# CTRL 0x41 0x01 0x0000 0x0003
> 01 00 00 04
01 = SPI_MASTER
00 = NO_CRC
00 04 = size
>> 20 00 01 00
20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
00 = NCI_MSG_CORE_RESET
01 = NCI_CORE_PARAM_SIZE_RESET
00 = NCI_RESET_TYPE_KEEP_CFG
< 00 00 00 06
00 = SPI_SLAVE
00 = NO_CRC
00 06 = size
<< 40 00 03 00 11 00
40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
00 = NCI_MSG_CORE_RESET
03 = NCI_CORE_PARAM_SIZE_RESET_RSP
00 = NCI_STATUS_OK
11 = NCI_VERSION (1.1)
00 = NCI_RESET_STATUS_KEPT_CFG
> 01 00 00 03
01 = SPI_MASTER
00 = NO_CRC
00 03 = size
>> 20 01 00
20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
01 = NCI_MSG_CORE_INIT
00 = size
< 00 00 00 1a
00 = SPI_SLAVE
00 = NO_CRC
00 1a = size
<< 40 01 17 00
40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
01 = NCI_MSG_CORE_INIT
17 = size
00 = NCI_STATUS_OK
<< 03 0e 02 01
03 0e 02 01 NFCC_FEATURES
02 = multiple NFCEEs
01 = RF_DISCOVER_CMD supported
08 = AID-based routing supported
04 = Protocol-based routing supported
02 = Technology-based routing supported
02 = Switched-off state supported
01 = Proprietary parameters
<< 06 00 01 02 03 81 83
06 = num_of_ifaces (6)
00 = NCI_INTERFACE_EE_DIRECT_RF
01 = NCI_INTERFACE_FRAME
02 = NCI_INTERFACE_ISO_DEP
03 = NCI_INTERFACE_NFC_DEP
81 = Proprietary Interface (81)
83 = Proprietary Interface (83)
<< 08 00 04 ff 0f 00 2e 04 10 2b 41
08 = num_of_conns_max (8)
00 04 = num_of_routes_max
ff = size_control_payload_max
0f 00 = size_large_params_max
2e = manufacturer_id
04 10 2b 41 = manufacturer_specific
> 01 00 00 05
01 = SPI_MASTER
00 = NO_CRC
00 05 = size
>> 20 03 02 01 52
20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
03 = NCI_MSG_CORE_GET_CONFIG
02 = num_of_params (2)
01 = CON_DEVICES_LIMIT
52 = LF_T3T_MAX
< 00 00 00 08
00 = SPI_SLAVE
00 = NO_CRC
00 08 = size
<< 40 03 05 00 01 52 01 10
40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
03 = NCI_MSG_CORE_GET_CONFIG
???
> 01 00 00 22
01 = SPI_MASTER
00 = NO_CRC
00 22 = size
>> 20 02 1f 0a
20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
02 = NCI_MSG_CORE_SET_CONFIG
1f = size
0a = num_of_params (10)
>> 21 01 00
21 = PI_BIT_RATE
01 = size_of_param
00 = 106 Kbit/s
>> 28 01 00
28 = PN_NFC_DEP_SPEED
01 = size_of_param
00 = Highest Available Bitrate
>> 30 01 04
30 = LA_BIT_FRAME_SDD
01 = size_of_param
04 = Bit Frame SDD value to be sent in Byte 1 of SENS_RES
>> 31 01 03
31 = LA_PLATFORM_CONFIG
01 = size_of_param
03 = Platform Configuration value to be sent in Byte 2 of SENS_RES
>> 54 01 06
54 = LF_CON_BITR_F
01 = size_of_param
02 = listen for 212 kbps
04 = listen for 424 kbps
>> 5b 01 00
5b = LI_BIT_RATE
01 = size_of_param
00 = 106 Kbit/s
>> 60 01 07
60 = LN_WT
01 = size_of_param
07 = waiting time (7)
>> 80 01 01
80 = RF_FIELD_INFO
01 = size_of_param
01 = RF_FIELD_INFO_NTF allowed
>> 81 01 01
81 = RF_NFCEE_ACTION
01 = size_of_param
01 = send RF NFCEE Actions
>> 82 01 0e
82 = NFCDEP_OP
01 = size_of_param
02 = ATTENTION only for error recovery
04 = don't send msgs without Transport Data Bytes
08 = chaining uses max number of Transport Data Bytes
< 00 00 00 05
00 = SPI_SLAVE
00 = NO_CRC
00 05 = size
<< 40 02 02 00 00
40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
02 = NCI_MSG_CORE_SET_CONFIG
02 = size
00 = NCI_STATUS_OK
00 = num_of_invalid_params (0)
> 01 00 00 13
01 = SPI_MASTER
00 = NO_CRC
00 13 = size
>> 21 00 10 05
21 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_RF_MANAGE
00 = NCI_MSG_RF_DISCOVER_MAP
10 = size (16)
05 = num_mapping_configs
>> 04 03 02
04 = NCI_PROTOCOL_ISO_DEP
03 = NCI_INTERFACE_MODE_POLL_N_LISTEN
02 = NCI_INTERFACE_ISO_DEP
>> 05 03 03
05 = NCI_PROTOCOL_NFC_DEP
03 = NCI_INTERFACE_MODE_POLL_N_LISTEN
03 = NCI_INTERFACE_NFC_DEP
>> 01 01 01
01 = PROTOCOL_T1T
01 = NCI_INTERFACE_MODE_POLL
01 = NCI_INTERFACE_FRAME
>> 02 01 01
02 = PROTOCOL_T2T
01 = NCI_INTERFACE_MODE_POLL
01 = NCI_INTERFACE_FRAME
>> 03 01 01
03 = PROTOCOL_T3T
01 = NCI_INTERFACE_MODE_POLL
01 = NCI_INTERFACE_FRAME
< 00 00 00 04
00 = SPI_SLAVE
00 = NO_CRC
00 04 = size
<< 61 07 01 00
61 = NCI_MTS_NTF | NCI_PBF_NO_OR_LAST | NCI_GID_RF_MANAGE
07 = NCI_MSG_RF_FIELD
01 = size
00 = No RF field
< 00 00 00 04
00 = SPI_SLAVE
00 = NO_CRC
00 04 = size
<< 41 00 01 00
41 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_RF_MANAGE
00 = NCI_MSG_RF_DISCOVER_MAP
01 = NCI_DISCOVER_PARAM_SIZE_RSP
00 = NCI_STATUS_OK
> 01 00 00 0a
01 = SPI_MASTER
00 = NO_CRC
00 0a = size
>> 21 01 07 00 01 01 03 00 01 05
21 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_RF_MANAGE
01 = NCI_MSG_RF_SET_ROUTING
07 = size
00 = last message
01 = routing_entries (1)
01 = protocol-based routing
03 = length (3)
00 = DH NFCEE ID
01 = power state (1 - switched on)
05 = PROTOCOL_NFC_DEP
< 00 00 00 04
00 = SPI_SLAVE
00 = NO_CRC
00 04 = size
<< 41 01 01 00
41 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_RF_MANAGE
01 = NCI_MSG_RF_SET_ROUTING
01 = size
00 = NCI_STATUS_OK
> 01 00 00 0c
01 = SPI_MASTER
00 = NO_CRC
00 0c = size
>> 20 02 09 01
20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
02 = NCI_MSG_CORE_SET_CONFIG
09 = size
01 = num_of_params
>> b9 06 01 00 00 0b 00 00
b9 = Proprietary parameter (b9)
06 = size_of_param
< 00 00 00 05
00 = SPI_SLAVE
00 = NO_CRC
00 05 = size
<< 40 02 02 00 00
40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
02 = NCI_MSG_CORE_SET_CONFIG
02 = size
00 = NCI_STATUS_OK
00 = num_of_invalid_params (0)
> 01 00 00 ca
01 = SPI_MASTER
00 = NO_CRC
00 ca = size
>> 20 02 c7 11
20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
02 = NCI_MSG_CORE_SET_CONFIG
c7 = size
11 = num_of_params (17)
>> 18 01 02
18 = PF_BIT_RATE
01 = size_of_param
02 = 424 Kbit/s
>> 2a 01 32
2a = PN_ATR_REQ_CONFIG
01 = size_of_param
30 = 0011b for LLCP
02 = ?
>> 80 01 00
80 = RF_FIELD_INFO
01 = size_of_param
00 = RF_FIELD_INFO_NTF not allowed
>> c2 02 03 02
c2 = Proprietary parameter (c2)
02 = size_of_param
>> c4 02 00 13
c4 = Proprietary parameter (c4)
02 = size_of_param
>> ca 05 00 0f 0d 03 08
ca = Proprietary parameter (ca)
05 = size_of_param
>> cb 01 00
cb = Proprietary parameter (cb)
01 = size_of_param
>> d6 0b 01 01 00 01 12 00 01 00 01 00 01
d6 = Proprietary parameter (d6)
0b = size_of_param
>> d8 01 01
d8 = Proprietary parameter (d8)
01 = size_of_param
>> de 04 01 00 00 00
de = Proprietary parameter (de)
04 = size_of_param
>> e0 07 00 60 93 1c 63 3e 0a
e0 = Proprietary parameter (e0)
07 = size_of_param
>> e1 02 79 07
e1 = Proprietary parameter (e1)
02 = size_of_param
>> e2 2a 48 07 0c 10 00 31 39 39 39 39 39 39 39 39 39 39 41 39 90 90 90 90 3f 90 90 90 88 8a 8c 94 94 28 04 07 00 00 00 00 00 00 00 00
e2 = Proprietary parameter (e2)
2a = size_of_param
>> e3 08 17 04 16 0d 10 0c 2b 0b
e3 = Proprietary parameter (e3)
08 = size_of_param
>> e4 01 37
e4 = Proprietary parameter (e4)
01 = size_of_param
>> e5 1e e0 1e 02 12 00 0a 00 10 04 54 54 54 54 2b 52 50 53 4e 20 2d 18 0c 02 07 00 94 70 94 70 20
e5 = Proprietary parameter (e5)
1e = size_of_param
>> e6 2d 01 68 00 77 00 8b 00 a7 00 d6 00 22 01 c0 01 9e 58 4c 40 33 26 20 1e 68 00 77 00 8b 00 a7 00 d6 00 22 01 c0 01 5e 58 4c 40 33 2b 26 1e
e6 = Proprietary parameter (e6)
2d = size_of_param
< 00 00 00 05
00 = SPI_SLAVE
00 = NO_CRC
00 05 = size
<< 40 02 02 00 00
40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
02 = NCI_MSG_CORE_SET_CONFIG
02 = size
00 = NCI_STATUS_OK
00 = num_of_invalid_params (0)
> 01 00 00 09
01 = SPI_MASTER
00 = NO_CRC
00 09 = size
>> 2f 1b 06 08 00 00 01 00 00
2f = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_PROP
1b = Proprietary message (1b)
06 = size
< 00 00 00 04
00 = SPI_SLAVE
00 = NO_CRC
00 04 = size
<< 4f 1b 01 00
4f = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_PROP
1b = Proprietary message (1b)
01 = size
> 01 00 00 30
01 = SPI_MASTER
00 = NO_CRC
00 30 = size
>> 20 02 2d 04
20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
02 = NCI_MSG_CORE_SET_CONFIG
2d = size
04 = num_of_params (4)
>> 29 11 46 66 6d 01 01 11 02 02 03 80 03 02 00 01 04 01 64
29 = PN_ATR_REQ_GEN_BYTES
11 = size_of_param
General Bytes for ATR_REQ
>> 2a 01 30
2a = PN_ATR_REQ_CONFIG
01 = size_of_param
30 = 0011b for LLCP
>> 61 11 46 66 6d 01 01 11 02 02 03 80 03 02 00 01 04 01 64
61 = LN_ATR_RES_GEN_BYTES
11 = size_of_param
General Bytes in ATR_RES
>> 62 01 30
62 = LN_ATR_RES_CONFIG
01 = size_of_param
30 = 0011b for LLCP
< 00 00 00 05
00 = SPI_SLAVE
00 = NO_CRC
00 05 = size
<< 40 02 02 00 00
40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
02 = NCI_MSG_CORE_SET_CONFIG
02 = size
00 = NCI_STATUS_OK
00 = num_of_invalid_params (0)
> 01 00 00 11
01 = SPI_MASTER
00 = NO_CRC
00 11 = size
>> 20 02 0e 04
20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
02 = NCI_MSG_CORE_SET_CONFIG
0e = size
04 = num_of_params (4)
>> 18 01 01
18 = PF_BIT_RATE
01 = size_of_param
01 = 212 Kbit/s
>> 32 01 40
32 = LA_SEL_INFO
01 = size_of_param
40 = NFC-DEP
>> 50 01 02
50 = LF_PROTOCOL_TYPE
01 = size_of_param
02 = NFC-DEP
>> 00 02 2c 01
00 = TOTAL_DURATION
02 = size_of_param
2c 01 = 11 256 ms
< 00 00 00 05
00 = SPI_SLAVE
00 = NO_CRC
00 05 = size
<< 40 02 02 00 00
40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
02 = NCI_MSG_CORE_SET_CONFIG
02 = size
00 = NCI_STATUS_OK
00 = num_of_invalid_params (0)
> 01 00 00 10
01 = SPI_MASTER
00 = NO_CRC
00 10 = size
>> 21 03 0d 06
21 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_RF_MANAGE
03 = NCI_MSG_RF_DISCOVER
0d = size
06 = num_of_configs (6)
>> 00 01
00 = NFC_A_PASSIVE_POLL_MODE
01 = every discovery period
>> 01 01
01 = NFC_B_PASSIVE_POLL_MODE
01 = every discovery period
>> 02 01
02 = NFC_F_PASSIVE_POLL_MODE
01 = every discovery period
>> 06 01
06 = NFC_15693_PASSIVE_POLL_MODE
01 = every discovery period
>> 80 01
80 = NFC_A_PASSIVE_LISTEN_MODE
01 = every discovery period
>> 82 01
82 = NFC_F_PASSIVE_LISTEN_MODE
01 = every discovery period
< 00 00 00 04
00 = SPI_SLAVE
00 = NO_CRC
00 04 = size
<< 41 03 01 00
41 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_RF_MANAGE
03 = NCI_MSG_RF_DISCOVER
01 = size
00 = STATUS_OK
# CTRL 0x41 0x01 0x0001 0x0003
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment