找回密码
 注册
关于网站域名变更的通知
查看: 596|回复: 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接口模块说明! G: k1 \/ O% k# m4 s# X& t  w
SYD8821内部集成一组硬件ISO7816接口,用户可直接通过该接口与SIM卡、CPU卡、Smart卡等支持7816的卡片进行通信。本文章介绍通过8821从IC卡获取一组随机数和打印初始化相关的ATR(复位应答)信息。6 o+ W6 f3 _1 _/ o
一、电路连接
  ~% F4 I' i3 u& O# k; K- Y
9 g! {! ^2 \1 E实物图连接
6 v- [6 _6 s1 }5 f

硬件设计注意:
! E/ x9 b1 ?2 e7 A(1)、7816的data这个IO需要接外部上拉电阻4.7K

二、软件工程1 Q* [( C9 Q+ L" [  d
(1)将7816驱动文件(atr_decoder.c、sc_reader.c、tpdu.c)加载到keil工程中* @, ^2 R- j& O" x5 N6 d. F; X) Q" P
) D4 l0 v4 d2 J3 ?, w
(2)相关代码
: e7 \1 w! M! B- S2 J8 p3 n1、7816初始化' \4 r# }! W0 o* F
void sc_test_init(void). G0 C! `# u1 O; V
{
6 d- k. ~5 |" X$ b7 Z8 e5 [pad_mux_write(25, 11); //VCCCTL
. O( p* \1 u' \2 }+ d- Kpad_mux_write(26, 11); //DET7 c& I' x6 u& T9 n! e' m
pad_mux_write(27, 11); //CLK7 u# H7 b, [  T4 L# s
pad_mux_write(28, 11); //IO
* f5 H# p2 E9 dpad_mux_write(29, 11); //RST6 E& H3 ?9 w2 `2 S# m
sc_reader_enable();1 B% b, v' b! P& V5 W: k- n
}+ [; e  L& G" g
/* Configure module settings /  T  W, m3 Y+ q# a
void sc_reader_enable(void)6 x& j* C! F7 w+ Z  j
{
  b8 g" Q" s% T; m% `8 M) ~, @SYS_CTRL->CLK_SC_EN = 1;- S1 q7 i+ B0 w0 b. f1 ^% ~
/
Configure RESET & ACTIVATE timeout to maximum /2 a6 t3 J; `9 i" i2 N, T6 ^7 Q! y( W
SC_CTRL->RESET_DURATION = 400;
8 |" G- }9 j+ f: |0 A3 \3 ISC_CTRL->ACTIVATE_DURATION = 30;/ X5 l  s) U  [/ @2 m
/
Configure FIFO threshold, FIFO size is 8, set half to inform*/+ ]6 W1 q1 o3 E6 H4 g, k7 J
SC_CTRL->RX_FIFO_THRESHOLD = 0x4;
5 s; A; j1 H5 j* vSC_CTRL->TX_FIFO_THRESHOLD = 0x4;% r# M. X% p. O9 K+ W+ @5 M
/* Retry configuration /- a) y, x3 z* x0 D5 l* n
SC_CTRL->TX_RETRY_CNT = 3;0 s3 F( x8 g: n3 \; E* P. b
SC_CTRL->RX_RETRY_CNT = 3;
" G2 g8 l9 N5 Z/
Enable RX FIFO Timeout */2 `6 Q- m. L4 m: y; j
SC_CTRL->RX_TIMEOUT_DETECT_EN = true;

sc_reader_spec_default();8 e) h# C8 \+ q% ]0 L
/* Enable TX/RX /
% X9 B4 h' }3 O' N! FSC_CTRL->TX_ENABLE = true;
% J7 Y5 s) S4 r+ }1 }  G) FSC_CTRL->RX_ENABLE = true;
7 Z. U8 _: J- B) H}- J" q; _  X1 M
/
Reset module configuration */
, P3 e4 E/ A+ _: ]% h5 Pstatic void sc_reader_spec_default(void): J& G, j& B! s( r
{
! k! D8 `2 D) p, i5 ]- `NVIC_DisableIRQ(ISO7816_IRQn);
) z! Z1 x$ X) _! [& \atr_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- f: y, V2 r" u6 W) [

}
/ X* H, s$ [- v- D( \# k* [7 @2、main函数
7 ^( Q* P) L. X' ]' N: K4 ?2 Xint main()
# ~" y, A. ?' \, p1 T8 \{* V( u( y, }1 |- G& i
__disable_irq();' j! V7 o% w. q
ble_init();" O6 g( z, h1 p" f( o: _* I
sys_mcu_clock_set(MCU_CLOCK_64_MHZ);0 n# \4 ~' m8 {. V. x
// RC bumping6 j2 O5 T: F" \
sys_mcu_rc_calibration();
+ h3 ?& _, h1 g' P" @' Q- ~) Q6 [+ F#ifdef USER_32K_CLOCK_RCOSC+ I$ T+ h  p7 B  w/ Z; b
sys_32k_clock_set(SYSTEM_32K_CLOCK_LPO);
; U6 e, X1 J6 _6 s' r4 n$ V3 kdelay_ms(500);
! L& z+ e) d: Y2 ELPOCalibration();//这是内部RC32k晶振的校准函数 经过该函数后定时器能够得到一个比较准确的值
+ C- B: Y: H* G9 [#else
: t$ G8 a% z7 T& P( Jsys_32k_clock_set(SYSTEM_32K_CLOCK_XO);+ X, E  S( ^: }8 A; g, w
#endif
1 j) A" j. Z: Kgpio_init(); //gpio初始化# K$ P8 K+ v' r! m: [
#ifdef SYD_RTT_DEBUG4 s4 j9 f5 M+ F0 w
DebugLogInit();
( w; D1 f, Z0 Tdbg_printf(“SYD RTT Init\r\n”);
- T9 v9 d; u- J6 d1 ]' o- P#endif
. O' z# A" \$ Y#ifdef DEBUG
: N$ x5 ^$ K/ j+ I& J# `dbg_init();
" G9 |7 m' m" V* T  D  `PMU_CTRL->UART_EN = 1;
% Z: H  `" |5 ~+ f. `/ {+ B- z#else+ b- h+ c- Q* p, f8 g* m+ L( Y
PMU_CTRL->UART_EN = 0;9 d2 o; ]3 K& ?9 n( ^( X
#endif: I0 P7 b2 ?/ i
#if defined(DEBUG) || defined(SYD_RTT_DEBUG)1 ]  D4 b  u2 A; ?
dbg_printf(“syd8821_2018-05-15 \r\n”);$ Q& M. _+ T# l3 ~& Y
dbg_printf(“SYD-TEK.Inc\r\n”);
: y9 q5 {5 o4 q- @+ ^6 b#endif
  [% p" `8 a& ~  X__enable_irq();3 _' ]+ |; f: \5 {( U. [9 d" R* C+ ^
gap_s_adv_start();
5 Z" m# i3 ~7 R# g6 V#if defined(DEBUG) || defined(SYD_RTT_DEBUG)9 m' F" t& V! ]' k3 h$ N+ J7 s
DBGPRINTF((“gap_s_adv_start\r\n”));
% N, Q; z6 J/ Y5 e, _#endif. }1 a3 T( s: Q( l* g
sc_test_init();9 P8 Y( U4 ]# E$ k8 O
while(1)
6 z2 S$ I' Q, B  o( l& l{
* u5 [: L$ P( N' t. `6 _sc_reader_task();
$ f2 T/ D) ]- X. N  k  c( g3 ~gpo_toggle(GPIO_25);//test9 v0 H9 @6 O; n) ?3 B# |' a. y
}
+ l3 \+ e9 _0 _}& f8 X+ T+ I1 r0 o9 V4 Z
3、7816中断处理2 ^2 q+ @; g! Q4 P8 I" }) V
1> 8821的7816中断标志
3 a2 S& m, e' Z8 F2 W6 p; `. s
/ _/ R9 G! O+ ]; o& e& d0 u5 u* w2> 中断函数
  W6 K2 X- \; _+ @
. j& m( x0 l; n( j3 f4、7816 任务处理(状态机)
! \& j9 ~% a3 b7 N+ O1 @& j  s" k4 V9 L& d& o4 K
三、获取IC卡随机数实验- L6 x! x- H1 _
1> 发送和接收回调实现' e& r( \6 @0 @6 ]% O. J" r! n

2> 在IC卡被激活后,即8821收到ATR并进行处理后,进行实验处理
$ y5 n8 x" B  S* @: j+ R

3> 实验结果
( n6 K$ w* s" F; B* u串口打印8 V& O* s/ X: C2 n

! M* F. v/ y* F; O% N* g- {
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-4 08:45 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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