APP ISO7816驱动
宏定义
APP_ISO7816_ACTION_NONE
| 描述 | 值 |
|---|---|
空值,不执行动作 |
HAL_ISO7816_ACTION_NONE |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_ACTION_OFF
| 描述 | 值 |
|---|---|
| 关闭 |
HAL_ISO7816_ACTION_OFF |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_ACTION_STOPCLK
| 描述 | 值 |
|---|---|
停止时钟 |
HAL_ISO7816_ACTION_STOPCLK |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_ACTION_ON
| 描述 | 值 |
|---|---|
上电并接受ATR |
HAL_ISO7816_ACTION_ON |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_ACTION_WARMRST
| 描述 | 值 |
|---|---|
热复位 |
HAL_ISO7816_ACTION_WARMRST |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_ACTION_RX
| 描述 | 值 |
|---|---|
接收数据 |
HAL_ISO7816_ACTION_RX |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_ACTION_TX
| 描述 | 值 |
|---|---|
发送数据 |
HAL_ISO7816_ACTION_TX |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_ACTION_TXRX
| 描述 | 值 |
|---|---|
发送数据然后接收数据 |
HAL_ISO7816_ACTION_TXRX |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_INTR_PRESENCE
| 描述 | 值 |
|---|---|
卡插入中断 |
HAL_ISO7816_INTR_PRESENCE |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_INTR_STATE_ERR
| 描述 | 值 |
|---|---|
状态错误中断 |
HAL_ISO7816_INTR_STATE_ERR |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_INTR_DMA_ERR
| 描述 | 值 |
|---|---|
DMA错误中断 |
HAL_ISO7816_INTR_DMA_ERR |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_INTR_RETRY_ERR
| 描述 | 值 |
|---|---|
| 重复多次操作依然失败 | HAL_ISO7816_INTR_RETRY_ERR |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_INTR_RX_ERR
| 描述 | 值 |
|---|---|
接收异常中断 |
HAL_ISO7816_INTR_RX_ERR |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_INTR_DONE
| 描述 | 值 |
|---|---|
| 动作完成 | HAL_ISO7816_INTR_DONE |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_CARD_ABSENT
| 描述 | 值 |
|---|---|
卡未插入 |
HAL_ISO7816_CARD_ABSENT |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_CARD_PRESENT
| 描述 | 值 |
|---|---|
卡已插入 |
HAL_ISO7816_CARD_PRESENT |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_IO_STATE_OFF
| 描述 | 值 |
|---|---|
IO处于关闭状态 |
HAL_ISO7816_IO_STATE_OFF |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_IO_STATE_IDLE
| 描述 | 值 |
|---|---|
IO处于空闲状态 |
HAL_ISO7816_IO_STATE_IDLE |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_IO_STATE_RX_WAIT
| 描述 | 值 |
|---|---|
IO处于等待接收状态 |
HAL_ISO7816_IO_STATE_RX_WAIT |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_IO_STATE_RX
| 描述 | 值 |
|---|---|
IO处于正在接收状态 |
HAL_ISO7816_IO_STATE_RX |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_IO_STATE_TX
| 描述 | 值 |
|---|---|
IO处于正在发送状态 |
HAL_ISO7816_IO_STATE_TX |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_IO_STATE_TX_GUARD
| 描述 | 值 |
|---|---|
IO处于发送保护状态 |
HAL_ISO7816_IO_STATE_TX_GUARD |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_PWR_STATE_OFF
| 描述 | 值 |
|---|---|
电源为关闭状态 |
HAL_ISO7816_PWR_STATE_OFF |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_PWR_STATE_PWRUP_VCC
| 描述 | 值 |
|---|---|
电源为VCC上电状态 |
HAL_ISO7816_PWR_STATE_PWRUP_VCC |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_PWR_STATE_PWRUP_RST
| 描述 | 值 |
|---|---|
电源为上电复位状态 |
HAL_ISO7816_PWR_STATE_PWRUP_RST |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_PWR_STATE_PWRDN_RST
| 描述 | 值 |
|---|---|
电源为下电复位状态 |
HAL_ISO7816_PWR_STATE_PWRDN_RST |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_PWR_STATE_PWRDN_VCC
| 描述 | 值 |
|---|---|
电源为VCC下电状态 |
HAL_ISO7816_PWR_STATE_PWRDN_VCC |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_PWR_STATE_STOP_PRE
| 描述 | 值 |
|---|---|
| 电源为准备停止时钟状态 |
HAL_ISO7816_PWR_STATE_STOP_PRE |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_PWR_STATE_STOP
| 描述 | 值 |
|---|---|
电源为时钟停止状态 |
HAL_ISO7816_PWR_STATE_STOP |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_PWR_STATE_STOP_POST
| 描述 | 值 |
|---|---|
电源为退出时钟停止状态 |
HAL_ISO7816_PWR_STATE_STOP_POST |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_PWR_STATE_IDLE
| 描述 | 值 |
|---|---|
电源为空闲态 |
HAL_ISO7816_PWR_STATE_IDLE |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_PWR_STATE_RX_TS0
| 描述 | 值 |
|---|---|
电源为接收TS0状态 |
HAL_ISO7816_PWR_STATE_RX_TS0 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_PWR_STATE_RX_TS1
| 描述 | 值 |
|---|---|
电源为接收TS1状态 |
HAL_ISO7816_PWR_STATE_RX_TS1 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_PWR_STATE_RX
| 描述 | 值 |
|---|---|
电源为接收状态 |
HAL_ISO7816_PWR_STATE_RX |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_PWR_STATE_TX
| 描述 | 值 |
|---|---|
电源为发送状态 |
HAL_ISO7816_PWR_STATE_TX |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
APP_ISO7816_PWR_STATE_TX_RX
| 描述 | 值 |
|---|---|
电源为发送并接收状态 |
HAL_ISO7816_PWR_STATE_TX_RX |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
结构体
app_iso7816_params_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| app_iso7816_mode_t use_mode |
ISO7816操作模式 |
该参数的取值可以是下列值中的任意一个:
|
| app_iso7816_pin_cfg_t pin_cfg |
ISO7816引脚配置 |
|
| iso7816_init_t init |
ISO7816通信参数 |
参考iso7816_init_t结构体 |
| iso7816_env_t iso7816_env |
仅用于记录初始化设备的句柄、相关参数和信号量等,不需要配置 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
app_iso7816_pin_cfg_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| app_iso7816_pin_t clk |
ISO7816时钟引脚 |
参考app_iso7816_pin_t结构体 |
| app_iso7816_pin_t rst |
ISO7816 reset引脚 |
参考app_iso7816_pin_t结构体 |
| app_iso7816_pin_t io |
ISO7816 IO引脚 |
参考app_iso7816_pin_t结构体 |
| app_iso7816_pin_t presence |
ISO7816 状态引脚 |
参考app_iso7816_pin_t结构体 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
app_iso7816_pin_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| app_io_type_t type |
IO类型 |
同app_io_evt_t定义 |
| app_io_mux_t mux |
设置IO映射功能 |
查看app_io_init_t结构体定义,具体取值参考芯片Datasheet中的Pin Mux |
| uint32_t pin |
选择IO引脚 |
查看app_io_init_t结构体定义,具体取值参考芯片Datasheet中的Pin Mux |
| app_io_pull_t pull |
设置IO上拉/下拉/浮空 |
同app_io_init_t结构体中的描述 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
iso7816_init_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| uint32_t clk_div |
分频系数 |
ISO7816输出时钟为(system clock)/(clk_div+1) |
| uint32_t wait_time |
等待回应时间,单位:ETU. |
0 ~ 0x3FFFF |
| uint16_t guard_time |
两个连续字符之间的间隔时间,单位:ETU |
0 ~ 0x3FF |
| uint8_t detect_coding |
指定在ATR接收期间是否自动检测编码约定。 |
|
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
app_iso7816_evt_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| app_iso7816_evt_type_t type |
事件类型 |
该参数的取值可以是下列值中的任意一个:
|
| union { uint32_t error_code; uint16_t size; }data; |
uint32_t error_code:ISO7816事件返回的错误号 uint16_t size:ISO7816已接收/发送的数据长度 说明: 若事件类型为传输错误,此处返回错误号;若事件类型为接收/发送完成,此处显示已接收/发送的数据长度 |
错误号及对应含义如下:
|
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
枚举
app_iso7816_mode_t
枚举定义如下:
| 成员 | 描述 |
|---|---|
| APP_ISO7816_TYPE_INTERRUPT = 0 |
中断模式 |
| APP_ISO7816_TYPE_POLLING = 1 |
轮询模式 |
| APP_ISO7816_TYPE_MAX = 2 |
ISO7816模式总个数,用于参数检测 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
app_iso7816_state_t
枚举定义如下:
| 成员 | 描述 |
|---|---|
| APP_ISO7816_INVALID = 0 |
ISO7816不可用 |
| APP_ISO7816_ACTIVITY= 1 |
ISO7816运行中 |
| APP_ISO7816_SLEEP = 2 |
ISO7816睡眠 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
app_iso7816_evt_type_t
枚举定义如下:
| 成员 | 描述 |
|---|---|
| APP_ISO7816_EVT_ERROR |
发生错误 |
| APP_ISO7816_EVT_ABORT |
放弃之前操作 |
| APP_ISO7816_EVT_PRESENCE |
卡插入或拔出 |
| APP_ISO7816_EVT_ATR_CPLT |
ATR接收完成 |
| APP_ISO7816_EVT_TX_CPLT |
发送完成 |
| APP_ISO7816_EVT_RX_CPLT |
接收完成 |
| APP_ISO7816_EVT_TX_RX_CPLT |
发送并接收完成 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_iso7816.h。
接口函数
| API | 芯片 | ||||
|---|---|---|---|---|---|
| GR551x | GR5526 | GR5x25 | GR533x | GR5405 | |
| app_iso7816_init |
Y |
Y |
N | N | N |
| app_iso7816_deinit |
Y |
Y |
N | N | N |
| app_iso7816_receive_sync |
Y |
Y |
N | N | N |
| app_iso7816_receive_async |
Y |
Y |
N | N | N |
| app_iso7816_transmit_sync |
Y |
Y |
N | N | N |
| app_iso7816_transmit_async |
Y |
Y |
N | N | N |
| app_iso7816_transmit_receive_sync |
Y |
Y |
N | N | N |
| app_iso7816_transmit_receive_async |
Y |
Y |
N | N | N |
| app_iso7816_set_action |
Y |
Y |
N | N | N |
| app_iso7816_get_power_states |
Y |
Y |
N | N | N |
| app_iso7816_set_etudiv |
Y |
Y |
N | N | N |
| app_iso7816_get_handle |
Y |
Y |
N | N | N |
app_iso7816_init
| 函数原型 | uint16_t app_iso7816_init(app_iso7816_params_t *p_params, app_iso7816_evt_handler_t evt_handler) |
|---|---|
| 功能说明 | 初始化ISO7816 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 | 回调函数形式参照typedef void (*app_iso7816_evt_handler_t)(app_iso7816_evt_t *p_evt); HAL层已经实现中断标志位的清理,用户不用关心中断标志的清理。 |
app_iso7816_deinit
| 函数原型 | uint16_t app_iso7816_deinit(void) |
|---|---|
| 功能说明 | 反初始化ISO7816 |
| 输入参数 | |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_iso7816_receive_sync
| 函数原型 | uint16_t app_iso7816_receive_sync(uint16_t size, uint32_t timeout) |
|---|---|
| 功能说明 | ISO7816轮询方式(同步)接收数据 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_iso7816_receive_async
| 函数原型 | uint16_t app_iso7816_receive_async(uint16_t size) |
|---|---|
| 功能说明 | ISO7816中断方式(异步)接收数据 |
| 输入参数 | size:数据长度 |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_iso7816_transmit_sync
| 函数原型 | uint16_t app_iso7816_transmit_sync(uint16_t size, uint32_t timeout) |
|---|---|
| 功能说明 | ISO7816轮询方式(同步)发送数据 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_iso7816_transmit_async
| 函数原型 | uint16_t app_iso7816_transmit_async(uint16_t size) |
|---|---|
| 功能说明 | ISO7816中断方式(异步)发送数据 |
| 输入参数 | size:数据长度 |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_iso7816_transmit_receive_sync
| 函数原型 | uint16_t app_iso7816_transmit_receive_sync(uint16_t tx_size, uint16_t rx_size, uint32_t timeout) |
|---|---|
| 功能说明 | ISO7816轮询方式(同步)先发送后接收数据 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_iso7816_transmit_receive_async
| 函数原型 | uint16_t app_iso7816_transmit_receive_async(uint16_t tx_size, uint16_t rx_size) |
|---|---|
| 功能说明 | ISO7816中断方式(异步)先发送后接收数据 |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_iso7816_set_action
| 函数原型 | uint16_t app_iso7816_set_action(uint32_t action) |
|---|---|
| 功能说明 | 请求ISO7816执行下一个操作 |
| 输入参数 | action:操作类型 选择以下参数的一个:
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_iso7816_get_power_states
| 函数原型 | uint32_t app_iso7816_get_power_states(void) |
|---|---|
| 功能说明 | 得到ISO7816电源状态 |
| 输入参数 | |
| 返回值 | 返回下面参数的一个:
|
| 备注 |
app_iso7816_set_etudiv
| 函数原型 | uint16_t app_iso7816_set_etudiv(uint32_t divide) |
|---|---|
| 功能说明 | 对时钟进行分频 |
| 输入参数 | divide:ETU分频系数(将CLK脚输出时钟除以该值+1,等于ETU长度) |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_iso7816_get_handle
| 函数原型 | iso7816_handle_t *app_iso7816_get_handle(void) |
|---|---|
| 功能说明 | 获取ISO7816句柄 |
| 输入参数 | |
| 返回值 | ISO7816句柄:详见SDK_Folder\drivers\inc\hal\gr55xx_hal_iso7816.h结构体 |
| 备注 |
示例工程
ISO7816
ISO7816模块实现ISO 7816标准,本示例实现ISO7816模块读取SIM卡信息,工程路径:SDK_Folder\projects\peripheral\iso7816\app_iso7816。
流程图
初始化参数
app_iso7816_params_t params = {
.use_mode = APP_ISO7816_TYPE_POLLING,
.pin_cfg = DEFAULT_IO_CONFIG,
.init = {
.wait_time = 0x6B,
.guard_time = 0x0A,
.detect_coding = ENABLE,
},
};
- use_mode:传输模式配置,选择APP_ISO7816_TYPE_POLLING,轮询模式
- pin_cfg:引脚配置,包含时钟引脚CLK、复位引脚Reset、数据输入输出引脚I/O、UICC Presence引脚
- init:通信参数配置,包括:
- init.wait_time:等待回应时间,0x6B ETU
- init.guard_time:两个连续字符之间的间隔时间,0x0A ETU
- init.detect_coding:指定在ATR接收期间自动检测编码约定
重要函数
- 初始化ISO7816
app_iso7816_init(¶ms, app_iso7816_evt_handler) - 获取ISO7816句柄
g_sim_card_handle = *app_iso7816_get_handle() - Reset ISO7816模块,获取ATR信息
sim_card_get_ATR(&g_sim_card_handle) - 协议类型选择(对ATR的响应)程序和配置通信速度
sim_card_PTS(&g_sim_card_handle) - 选择Master的根目录
sim_card_select_MF(&g_sim_card_handle) - 读取ICCID信息
sim_card_read_ICCID(&g_sim_card_handle) - 读取IMSI信息
sim_card_read_IMSI(&g_sim_card_handle)
测试验证
外接SIM卡到开发板,连接开发板到PC端,打开串口助手,连接串口,查看串口日志,串口将打印ICCID和IMSI信息。每个SIM卡ICCID和IMSI信息存在差异,需要根据实际的SIM对比。