# Inventory: inventory - request | 字段名称 | 比特数 | | ------------ | ----------- | | SOF | | | Flags | 8 bits | | Inventory | 8 bits | | Optional AFI | 8 bits | | Mask length | 8 bits | | Mask value | 0 – 64 bits | | CRC16 | 16 bits | | EOF | | - responses | 字段名称 | 比特数 | | -------- | ------- | | SOF | | | Flags | 8 bits | | DSFID | 8 bits | | UID | 64 bits | | CRC16 | 16 bits | | EOF | | - 函数 ```c int inventory( uint8 u8Flag, uint8 u8AFI, uint8 u8MaskLen, // bitlen uint8 au8MaskValue[8], // . uint8 *pu8RxFlags, uint8 *pu8RxDSFID, uint8 au8RxUID[8] ); ``` 返回: - `1` 表示清晰收到一个 VICC 的应答; - `0` 表示没有 VICC 应答; - `<0` 表示有多个 VICC 应答; 如果返回 `< 0` ,或者:VCD 发送 EOF,继续点名,或者:修改 masklen & maskvalue,重新发送 inventory() # Stay quiet: - request | 字段名称 | 比特数 | | ---------- | ------- | | SOF | | | Flags | 8 bits | | Stay quiet | 8 bits | | UID | 64 bits | | CRC16 | 16 bits | | EOF | | - response 无 - 函数 ```c int stayQuiet( uint8 u8Flags, uint8 au8UID[8] ); ``` # Read Single Block - request | 字段名称 | 比特数 | | ----------------- | ------- | | SOF | | | Flags | 8 bits | | Read single block | 8 bits | | UID | 64 bits | | Block number | 8 bits | | CRC16 | 16 bits | | EOF | | request 中,是否存在 UID,由 flags 决定(address mode or select mode)。 - response | 字段名称 | 比特数 | | ---------- | ------- | | SOF | | | Flags | 8 bits | | Error code | 8 bits | | CRC16 | 16 bits | | EOF | | | 字段名称 | 比特数 | | --------------------- | ------- | | SOF | | | Flags | 8 bits | | Block security status | 8 bits | | Data | | | Block length | | | CRC16 | 16 bits | | EOF | | - 函数 ```c int readSingleBlk( uint8 u8Flags, uint8 au8UID[8], uint8 u8BlkNo, uint8 *pu8RxFlags, uint8 *pu8ErrCode uint8 *pu8BlkSecurityStatus, uint8 au8Dat[] ); ``` 返回值:flags. 是否返回:pu8BlkSecurityStatus,要看 u8Flags 中 optional_flag。 或 ```c // 返回:0,正确,否则 Flags. Uint8 readSingleBlk( uint8 u8VisitMode, // 1 for address mode, 0 for select mode uint8 u8Optionalflag; // 1 return security status; uint8 au8UID[8], uint8 u8BlkNo, uint8 *pu8BlkSecurityStatus, // optionalflag = 1 时,有效; uint8 au8Dat[] ); ``` # Write Single Block - request | 字段名称 | 比特数 | | ------------------ | ------- | | SOF | | | Flags | 8 bits | | Write single block | 8 bits | | UID | 64 bits | | Block number | 8 bits | | Data | | | Block length | | | CRC16 | 16 bits | | EOF | | - response - 有 Error_flag | 字段名称 | 比特数 | | ---------- | ------- | | SOF | | | Flags | 8 bits | | Error code | 8 bits | | CRC16 | 16 bits | | EOF | | - 无 Error_flag | 字段名称 | 比特数 | | ---------- | ------- | | SOF | | | Flags | 8 bits | | Error code | 8 bits | | CRC16 | 16 bits | | EOF | | - 函数 ```c int writeSingleBlk( uint8 u8Flags, uint8 au8UID[8], uint8 u8BlkNo, uint8 au8Dat[], uint8 *pu8RxFlags, uint8 *pu8ErrCode ); ``` # Read multiple Blocks - request | 字段名称 | 比特数 | | ------------------- | ------- | | SOF | | | Flags | 8 bits | | Read multiple block | 8 bits | | UID | 64 bits | | First block number | 8 bits | | Number of blocks | 8 bits | | CRC16 | 16 bits | | EOF | | - response - 有 Error_flag | 字段名称 | 比特数 | | ---------- | ------- | | SOF | | | Flags | 8 bits | | Error code | 8 bits | | CRC16 | 16 bits | | EOF | | - 无 Error_flag | 字段名称 | 比特数 | | --------------------- | ------- | | SOF | | | Flags | 8 bits | | Block security status | 8 bits | | Data | | | Block length | | | CRC16 | 16 bits | | EOF | | **注**: Data 和 Block length 的内容根据需要重复。 - 函数 ```c int readMultipleBlks( uint8 u8Flags, uint8 au8UID[8], uint8 u8BlkFirstNo, uint8 u8BlkNums, uint8 *pu8RxFlags, uint8 *pu8ErrCode uint8 au8BlkSecurityStatus[], uint8 au8Dat[] ); ``` # Write multiple Blocks - request | 字段名称 | 比特数 | | -------------------- | ------- | | SOF | | | Flags | 8 bits | | Write multiple block | 8 bits | | UID | 64 bits | | First block number | 8 bits | | Number of blocks | 8 bits | | Data | | | Block length | | | CRC16 | 16 bits | | EOF | | **注**: Data 和 Block length 的内容根据需要重复。 - response - 有 Error_flag | 字段名称 | 比特数 | | ---------- | ------- | | SOF | | | Flags | 8 bits | | Error code | 8 bits | | CRC16 | 16 bits | | EOF | | - 无 Error_flag | 字段名称 | 比特数 | | -------- | ------- | | SOF | | | Flags | 8 bits | | CRC16 | 16 bits | | EOF | | - 函数 ```c int writeMultipleBlks ( uint8 u8Flags, uint8 au8UID[8], uint8 u8BlkFirstNo, uint8 u8BlkNums, uint8 au8Dat[], uint8 *pu8RxFlags, uint8 *pu8ErrCode ); ```