找回密码
 注册
关于网站域名变更的通知
查看: 578|回复: 1
打印 上一主题 下一主题

SYD8821 ISO7816接口模块使用说明

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-10-27 18:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

SYD8821是具有全球领先低功耗(RX 2.4mA @-94.5dBm灵敏度,TX 4.3mA @0dBm输出功率)的蓝牙低功耗SOC芯片,在极低电流下实现了优异的射频性能,搭配176kB SRAM,512kB flash,非常适合中高阶可穿戴、智能家居、物联网等低功耗应用。

SYD8821 ISO7816接口模块说明* y4 W8 K7 @" Q4 w
SYD8821内部集成一组硬件ISO7816接口,用户可直接通过该接口与SIM卡、CPU卡、Smart卡等支持7816的卡片进行通信。本文章介绍通过8821从IC卡获取一组随机数和打印初始化相关的ATR(复位应答)信息。- J* {) m( y/ X; B+ t2 W
一、电路连接
  m5 A$ Z2 w: Y* s" N! r) A* M+ y! _8 U. I1 F3 j8 p5 i6 M+ o
实物图连接
/ u" I5 w1 E, v/ d7 f8 L' h

硬件设计注意:1 e5 F1 r# w( Q' K7 w! Q
(1)、7816的data这个IO需要接外部上拉电阻4.7K

二、软件工程
5 y8 D" E9 t1 u% X(1)将7816驱动文件(atr_decoder.c、sc_reader.c、tpdu.c)加载到keil工程中+ I! f9 Q& \5 W: t+ q+ L
1 U+ z) ~& b0 [$ m7 ?- v% ^
(2)相关代码: \$ e# O$ d4 A( g/ l5 ~" d
1、7816初始化" C, t  J2 m( z$ i
void sc_test_init(void)
; ^. e, E5 T# f+ f7 |* M! X{
6 N$ V# f7 ~- S  L# F- n, Upad_mux_write(25, 11); //VCCCTL
: J% r  n. i9 i, s! zpad_mux_write(26, 11); //DET" M9 Z$ `1 G+ ^6 r& c
pad_mux_write(27, 11); //CLK! Z+ ~, h2 m2 a9 x+ Z
pad_mux_write(28, 11); //IO4 ^4 c/ t5 k3 n; A0 S
pad_mux_write(29, 11); //RST
6 {( ~5 z! G) A- ~; m6 `4 Wsc_reader_enable();
+ G' B9 m. p" i  P}4 l" d& f/ Z8 X/ `) d
/* Configure module settings /
4 L) m3 a) h/ a& Gvoid sc_reader_enable(void)
. [; \, a2 d0 p7 N! x; c) q{
5 e3 b: M7 N" O2 E; JSYS_CTRL->CLK_SC_EN = 1;
  \" E% u# O, `0 A, {/
Configure RESET & ACTIVATE timeout to maximum /- |/ m; O7 u5 E$ Y+ B* s- [
SC_CTRL->RESET_DURATION = 400;" U) [$ S+ u- n2 C" _( K  d0 K- a
SC_CTRL->ACTIVATE_DURATION = 30;8 y! @: t- }2 Q$ h
/
Configure FIFO threshold, FIFO size is 8, set half to inform*/
  A. ^0 {& E) `% O  `SC_CTRL->RX_FIFO_THRESHOLD = 0x4;
' q/ U0 m  ]  S  _. R  v& J2 BSC_CTRL->TX_FIFO_THRESHOLD = 0x4;
# ]8 o% V2 z7 G3 |0 q: d9 _; K- P3 N/* Retry configuration /
9 m- c2 f8 N. m: }) NSC_CTRL->TX_RETRY_CNT = 3;3 P  K% V/ D3 I% @0 c
SC_CTRL->RX_RETRY_CNT = 3;0 }! K" i& \: d& b& F4 U
/
Enable RX FIFO Timeout */& X& r& ^6 b8 K
SC_CTRL->RX_TIMEOUT_DETECT_EN = true;

sc_reader_spec_default();
8 c) U0 O- t$ h6 ?0 f) I8 |" v. N/* Enable TX/RX /# A% y# `; ]' L7 Z/ J3 p
SC_CTRL->TX_ENABLE = true;
- o5 h2 `+ o1 w1 ?" |SC_CTRL->RX_ENABLE = true;: j2 _  ^7 H" D, E% }5 d  Y  A4 h
}
$ J% P9 }2 p' N8 ^1 C/
Reset module configuration */! G; U$ G3 ]0 M. M5 A
static void sc_reader_spec_default(void)6 J0 r" t. X3 S8 K5 }* E) l
{3 w" y7 g0 S  H" D' ]
NVIC_DisableIRQ(ISO7816_IRQn);
" Q0 x& E0 }) m  z5 q% Datr_reset();

SC_CTRL->EXTRA_GUARD_TIME = 0;sc_reader_set_FD(0x01);SC_CTRL->CLK_STOP_EN = false;card_clock_stoppable = false;/* Reset RX queue for ATR*/queue_reset(&sc_queue);sc_reader_enable_retry();/* Enable SC Interrupt */SC_CTRL->INTS_EN = RX_FIFO_INT | ATR_DONE |                   ATR_FAIL | CARD_DETECT |                   CARD_REMOVE | DEACTIVATE |                   TX_RETRY_OVER_LIMIT | RX_RETRY_OVER_LIMIT;/* Set clk to <= 5MHz */{                        // Source by PCLK    uint32_t clk = 64000000 / 2;    clk /= 5000000;    sc_reader_config_clock_div((uint16_t)clk);}/* Clear Pending Interrupt */SC_CTRL->INTS_STATE = SC_INT_ALL;NVIC_EnableIRQ(ISO7816_IRQn);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
    ) _/ G% e2 T+ R3 N) R' t

}
! O0 y, h( ?  P* n  Y+ D2、main函数' k+ M8 t- E$ j
int main(): o, `  ~) s2 \5 h; i6 V
{" v4 L0 F- r9 [4 D3 K+ V
__disable_irq();: s; K5 j. C# B4 G, ], B
ble_init();
9 B) x% J' Y4 W1 {1 a9 qsys_mcu_clock_set(MCU_CLOCK_64_MHZ);
/ U: [# `! B) k3 }( R* W// RC bumping1 }, E1 Y) ]0 T$ ^% n- Y
sys_mcu_rc_calibration();3 Y# _: @8 f5 n7 E
#ifdef USER_32K_CLOCK_RCOSC
. @! w/ P- r* I" g  osys_32k_clock_set(SYSTEM_32K_CLOCK_LPO);
3 u4 c! d% ^- b. j" vdelay_ms(500);9 ]9 a6 m) J5 ?
LPOCalibration();//这是内部RC32k晶振的校准函数 经过该函数后定时器能够得到一个比较准确的值
* F! U& s4 k( z6 y0 p6 j#else
6 j$ E! N  l) n. U7 l* e1 Osys_32k_clock_set(SYSTEM_32K_CLOCK_XO);
  \' H2 B8 U- d3 n0 [# A0 A/ t. [#endif
! |5 H9 M! I# E/ ^: d1 W+ fgpio_init(); //gpio初始化
; L8 Z: k- P9 m9 O' S7 w5 O. h#ifdef SYD_RTT_DEBUG, O" n! w" ~# @5 I- C
DebugLogInit();  K4 {, `$ T9 j/ o
dbg_printf(“SYD RTT Init\r\n”);
; P0 O9 c: K+ p#endif7 g. q; \) n& d% K0 N
#ifdef DEBUG7 X, |: e5 W& m5 c9 n
dbg_init();% H) i7 c5 f# K1 u$ a1 R8 p" ^
PMU_CTRL->UART_EN = 1;0 q& ]) ]' s  f( Z
#else" Z  O+ ^$ q) v4 U4 g  q) l* y
PMU_CTRL->UART_EN = 0;
# @$ G5 E% k7 N#endif
8 W5 b) [* u: A6 M#if defined(DEBUG) || defined(SYD_RTT_DEBUG)
- u4 x6 c+ r$ ?( |dbg_printf(“syd8821_2018-05-15 \r\n”);
! D$ F8 q) h2 D1 }% jdbg_printf(“SYD-TEK.Inc\r\n”);2 ?5 ?/ G4 R! l# F4 {6 C/ ]
#endif
0 ~8 v% Y6 F/ E9 x3 x__enable_irq();
9 L: D* ]  \  o* ^* f. Ugap_s_adv_start();
: `. |/ r0 x( U' k#if defined(DEBUG) || defined(SYD_RTT_DEBUG)- ~: p, g+ O0 l4 W. n8 V
DBGPRINTF((“gap_s_adv_start\r\n”));( f% j) ]3 X7 C! I3 I+ ]1 M( m
#endif' Y9 R+ F$ ~7 S0 [$ Z
sc_test_init();7 F' `! J2 W# y6 D
while(1)# q' [: e- C, a* g
{
6 H: j' v3 @+ q+ h) ~+ @& _: o. tsc_reader_task();
* P# h% K4 T. q. u# _gpo_toggle(GPIO_25);//test
! q- P" d( Y# w2 T* j  f}  F2 m% A$ i. ~% X+ t' |
}+ Q$ C2 m7 ?, A
3、7816中断处理
1 L* F+ x0 Z9 Y7 R3 ^! }( \, v1> 8821的7816中断标志
+ D' h0 A1 e2 D% q
# t: J+ B& o0 P  ~' v2> 中断函数  c0 t* q1 ~' B2 B( z* x

3 I4 M3 }# J$ q0 t! H4、7816 任务处理(状态机)9 B! O4 Q: M& [' K* `
( d4 j8 F& o8 C8 t# ]. W5 E
三、获取IC卡随机数实验1 c4 Q: A  c% {! W- ^# @8 N
1> 发送和接收回调实现  A+ Q1 b. u4 C2 r' C  T/ v/ \' B

2> 在IC卡被激活后,即8821收到ATR并进行处理后,进行实验处理
: Y+ i1 }: w4 I" A" y/ ?

3> 实验结果) H" M/ ~! g6 N6 h
串口打印# {6 x8 c$ ^" |9 a/ F6 J/ c7 R


; c$ ^, D- h- m0 C, ]# r& Q8 W6 ~- S
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-9-24 02:26 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表