SWD调试接口

Jtag 是20PIN接口(非常多的接地PIN),太多的PIN会导致一些小型的PCB板很拥挤,也会增加布线的难度。 使用SWD接口下载调试,只需要要使用2-6个PIN: VCC, GND, RST, SWDIO, SWCLK, SWO 其中, SWDIO, SWCLK是必须的 国内仿制 ULINK2 非常好的支持 SWD 模式, 速度可以达到 10M。 ULINK2 需要的硬件接口为: GND, RST, SWDIO, SWCLK Ulink2将JTAG的1、7、9、20分别与自己的开发板上JTAG的VCC、JTMS/SWDIO、JTCK/SWCLK GND用杜邦线相连即可 JLink按SWD方式来调试,实际需要接1,7,9,15,20脚,某些资料上说的需要6个脚(第13脚SWO也需要连上)是不对的,SWO不需要连接。SWO是调试数据,log可以从这里打印。 SEGGER Embedded Studio can use SWO for printf Output to the Debug Terminal and for code profiling and execution trace. https://wiki.segger.com/Configure_SWO_in_Embedded_Studio 有些开发板,没有引出RST线。那么 不接第15脚,即RESET脚,仅接4条引线,即Vref,SWDIO, SWCLK, GND。 在MDK 中 设置时Reset位选择:AutoDetect,可以正常下载,仿真。 如果Reset位选选择:HW Reset ,则不能正常下载。 这是正常的,硬件reset信号都没连接,自然不能硬件复位。 小程序 都是在RAM中调试的,而且只接三根线GND SWDIO SWCLK (VCC 直接接JTAG内部的),很爽利。不过今天要试IIS 要放一个大的数据进去,于是要烧到FLASH中去, 发现很快进度条走完, 然后显示失败,放狗一搜,说要接RESET,于是接上,果然下进去了。 在MDK仿真器的设置里面不使用硬件复位,而是用system reset或者vect reset,前者适用的范围更广 因为SWD有软件复位协议,不需要硬件RST信号,也可以复位系统。

SEGGER Embedded Studio链接与段布置

Linking and section placement 可执行程序包含很多段(section). 典型地,有代码程序段, 初始化数据段,清0数据段等。通常,在程序中有多个段,并且,必须将它们放在内存的指定地址。 为了描述你的程序的程序段在内存中如何定位,SEGGER Embedded Studio项目系统使用内存映射文件 和 段布置文件。 内存映射文件,指定了 目标内存段(target memory segment)的起始地址和大小。 段布置文件,指定在 目标内存段(segment)的 什么位置防止 程序段(section). 将内存映射 与 段布置方案 分开, 可以让一个硬件描述 在多个项目中共享。也可以让一个项目,用不同的硬件描述来建立。

以AT91SAM7S256为例用Keil MDK创建从RAM启动的简单应用

安装MDK5 和 ARM7/ARM9支持包
https://armkeil.blob.core.windows.net/eval/MDK531.EXE
https://armkeil.blob.core.windows.net/legacy/MDK79525.EXE

准备 RAM.ini

FUNC void Setup (void) {
  PC = 0x00200000;
}

_WDWORD(0xFFFFFD44, 0x00008000);     // WDT_WDMR: Disable Watchdog

// Switching from Slow Clock to Main Oscillator for faster Download
_WDWORD(0xFFFFFC20, 0x00000601);     // PMC_MOR: Enable Main Oscillator
_sleep_(10);                         // Wait for stable Main Oscillator
_WDWORD(0xFFFFFC30, 0x00000001);     // PMC_MCKR: Switch to Main Oscillator

LOAD %L INCREMENTAL       // Download

Setup();                             // Setup for Running

g, main
准备Main.c
此应用是一个MCU的hello world, 用GPIO驱动LED闪烁
#include "AT91SAM7S256.h"
#define LED_A (1U<<0) // PA0, pin 48
#define LED_B (1U<<1) // PA1, pin 47

void sleep_ms(unsigned int msec)
{
  volatile unsigned int i;
  for (i = 0; i < 1000 * msec; i++) {
    __asm ("NOP");
  }
}

int main(void) {
  /* Configure the pins as outputs */
  AT91C_BASE_PIOA->PIO_OER = (LED_A | LED_B);
  /* Enable PIOC control on the pins*/
  AT91C_BASE_PIOA->PIO_PER = (LED_A | LED_B);
  /* Disable pull-ups */
  AT91C_BASE_PIOA->PIO_PPUDR = (LED_A | LED_B);

  while(1)
  {
    /* Turn LED on, high level */
    AT91C_BASE_PIOA->PIO_SODR = LED_A;
    sleep_ms(1);

    /* Turn LED off, low level */
    AT91C_BASE_PIOA->PIO_CODR = LED_A;
    sleep_ms(1);
  }
}

开启MDK,新建Project,选择存储位置
选择设备,从Legacy Device Database里选取AT91SAM7S256
同意复制启动文件SAM7.s到项目中
在 左侧项目管理选择Target1, 右键选取Manage Project Items
双击Target1,将其改名为Flash, 新增加一个RAM的Target. 将Source Group 1改名为Startup, 新增一个Source的Group,并增加一个Main.c的文件
项目左侧,选中RAM这个Target,右键选取Options for RAM Target
切换到Linker这个标签页
取消选中Use Memory Layout from Target Dialog, 在右侧设置R/O Base为0x00200000, R/W Base为0x00202000, 删除Scatter File, 也就是留空
切换到Debug标签
选中 Use ULink2/ME ARM Debugger,   取消 选择 Load Application at Startup,  添加Initilization File, 选择 RAM.ini
切换到Utilities, 取消Update Target before Debugging
点击菜单栏,Project–Build Target, 然后,Debug–Start Debug Session即可开始调试

屏蔽运营商本机号码自动登录

移动
10.0.0.1 config.cmpassport.com
10.0.0.1 www.cmpassport.com
10.0.0.1 wap.cmpassport.com

https://onekey1.cmpassport.com/unisdk/rs/ckRequest

https://config.cmpassport.com/client/uniConfig

https://log1.cmpassport.com:9443/log/logReport

https://onekey1.cmpassport.com/unisdk/

https://smsks1.cmpassport.com/unisdk/

http://www.cmpassport.com/unisdk/

https://config.cmpassport.com/client/uniConfig

verify.cmpassport.com

————-

https://www.cmpassport.com/unisdk/rs/getPrePhonescrip

encrypted
reqdata
securityreinforce

http://wap.cmpassport.com/openapi/wabGetuserInfo?channelId=
expandParams=
message=
msgId=
openType=
sign=
userId=

{“detailErrorCode”:””,
“msgId”:””,
“pcId”:””,
“resultcode”:”121″,
“systemTime”:””
“desc”:”获取移动手机失败”}

独有网关认证及sim卡快捷认证方式可实现免密一键登录
6种认证方式,在不同场景下提供更加安全的认证

https://onekey1.cmpassport.com/unisdk/rs/ckRequest
appid
apppackage
appsign
clienttype
interfacever
keyid
msgid
sdkver
sign
timestamp
ver

https://onekey1.cmpassport.com/client/queryUpgrade

中国移动南方基地–中移互联网有限公司

http://www.cmpassport.com/unisdk/rs/getphonescrip
interfacever
keyid
reqdata
ver

电信
10.0.0.1 id6.me
10.0.0.1 open.e.189.cn

https://open.e.189.cn/openapi/flow/getOpenId=?timestamp
state
clientId
clientType
format=json
version=1.5
sign=

http://id6.me/openapi/networkauth/preGetMobile.do?paramKey=
paramStr
clientId=
clientType=
format=json
version=v1.5
sign=

https://open.e.189.cn/api/logbox/oauth2/getPreMobileUrl.do?appKey=8023528553&clientType=2&format=json&version=v1.0&preUrlCBN=jsonp_gj1n&bussinessType=5&callbackMsg=callbackMsg&sFlag=false&callback=callbackMsg

callbackMsg({ “result”:0, “preUrl”:”http://id6.me/openapi/networkauth/preGetMobile.do?sign=83C635DFA36E9E119C25EE3350CC7E46E4D8F9E9¶mStr=DCE7D0A0714A333877466D264ACFAF95D781BB52204DB909059E13D0F27CED71374E9FD9D8B42C34F4DD2B8FFB52BAF9BF80C41502AEDA5BA05E2B70BE536FBCEBF42FA6C63B79F82FD12E5FF851090FD1DC2A9DE1508B35A4701B4A91AF0B6AF2783BA67BE71BED5CBCF73D6D10BD7B05A5B835E4D4AAC36CA078216C98DE73BF9447006B9E76FF9B050EE4F45DD36B&format=jsonp¶mKey=A5AFB2B7167CC91D9126EF900B16B3A6A183712BF6A1659C56A2B1239B5B85BEB72575085E3E362664602B8E1129BD1183C57739601FC42352C5DAE685F196AAD18B86922B520FDE06CDF09DDD05227EA08730504B7DD338A053E8246FD6D5D487116A3C614DD6C6BD13CFF1D77BEEDAEEE7462BC7BCD7FF5A927A06FC88D69C&clientId=8023528553&version=v1.0&clientType=2″, “msg”:”success”, “aesCacheKey”:”191abc14-4a6c-44b7-966a-559dae683db5″ })

http://id6.me/openapi/networkauth/preGetMobile.do?sign=83C635DFA36E9E119C25EE3350CC7E46E4D8F9E9¶mStr=DCE7D0A0714A333877466D264ACFAF95D781BB52204DB909059E13D0F27CED71374E9FD9D8B42C34F4DD2B8FFB52BAF9BF80C41502AEDA5BA05E2B70BE536FBCEBF42FA6C63B79F82FD12E5FF851090FD1DC2A9DE1508B35A4701B4A91AF0B6AF2783BA67BE71BED5CBCF73D6D10BD7B05A5B835E4D4AAC36CA078216C98DE73BF9447006B9E76FF9B050EE4F45DD36B&format=jsonp¶mKey=A5AFB2B7167CC91D9126EF900B16B3A6A183712BF6A1659C56A2B1239B5B85BEB72575085E3E362664602B8E1129BD1183C57739601FC42352C5DAE685F196AAD18B86922B520FDE06CDF09DDD05227EA08730504B7DD338A053E8246FD6D5D487116A3C614DD6C6BD13CFF1D77BEEDAEEE7462BC7BCD7FF5A927A06FC88D69C&clientId=8023528553&version=v1.0&clientType=2

http://id6.me/openapi/networkauth/preGetMobile.do?sign=83C635DFA36E9E119C25EE3350CC7E46E4D8F9E9¶mStr=DCE7D0A0714A333877466D264ACFAF95D781BB52204DB909059E13D0F27CED71374E9FD9D8B42C34F4DD2B8FFB52BAF9BF80C41502AEDA5BA05E2B70BE536FBCEBF42FA6C63B79F82FD12E5FF851090FD1DC2A9DE1508B35A4701B4A91AF0B6AF2783BA67BE71BED5CBCF73D6D10BD7B05A5B835E4D4AAC36CA078216C98DE73BF9447006B9E76FF9B050EE4F45DD36B&format=jsonp¶mKey=A5AFB2B7167CC91D9126EF900B16B3A6A183712BF6A1659C56A2B1239B5B85BEB72575085E3E362664602B8E1129BD1183C57739601FC42352C5DAE685F196AAD18B86922B520FDE06CDF09DDD05227EA08730504B7DD338A053E8246FD6D5D487116A3C614DD6C6BD13CFF1D77BEEDAEEE7462BC7BCD7FF5A927A06FC88D69C&clientId=8023528553&version=v1.0&clientType=2

请使用电信号在4G网络下使用

联通
10.0.0.1 opencloud.wostore.cn 小沃科技有限公司
10.0.0.1 auth.wosms.cn 联通在线信息科技有限公司
10.0.0.1 id.mail.wo.cn 中国联合网络通信集团有限公司
mdn.open.wo.cn
hmrz.wo.cn

nishub1.10010.com
nisportal.10010.com  (这个可能没关系)

enrichgw.10010.com


联通有多个子公司对外提供这个服务,需要屏蔽的域名最多

https://hmrz.wo.cn/sdk-resource/terms/number_authentication.html

https://auth.wosms.cn/api/netm/v1.0/gmbs?seq=

返回:
{
“code”:1,
“msg”:”公网IP无效”,
“seq”:””
“status”:1101
}

https://auth.wosms.cn/dro/netm/v1.0/qc

apiKey
params
paramsKey
sign
sign_Type

https://nisportal.10010.com:9004/api?appid=&ret_url=

https://id.mail.wo.cn/openapi/auth/accessToken.do?appId=
appType=
version=
paramKey
paramStr
sign

重定向:
http://123.125.99.9:9001/api?
appid=

https://id.mail.wo.cn/openapi/auth/accessToken/callback.do?appId
operatorType
appName
appType
version
aeskey

{ “msg”:网络不能识别
“result”:3002}

——————-
https://mail.wo.cn/wap/noPwdLogin.wo
返回

{
“paramLogin”:
“https://id.mail.wo.cn/openapi/auth/accessToken.do?
appId=D0C910F6135849B1B347BAE6ADC2930D
&appType=17
&version=v1.0
&sign=
¶mKey=
¶mStr=

}

linux控制智能卡读卡器的输出电压

libccid

/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist -> /etc/libccid_Info.plist

修改 ifdDriverOptions 的值

0 表示输出 5V电压(这也是默认值)
16 也就是0x10, 表示输出3V电压,如果失败,再输出5V
32, 也就是0x20, 表述输出1.8V,如果失败,再分别尝试3V和5V
48, 也就是0x30, 让读卡器自己选择。

某些读卡器不支持驱动对其进行电压设置

比如 深圳神州科技 用Identive/SCM芯片做的
Identiv SCR35xx USB Smart Card Reader [CCID Interface]
Identive CLOUD 2700 R Smart Card Reader [CCID Interface]

始终使用5V电压

而 SSK和Hawk用 Realtek 芯片做的读卡器 就支持驱动设置电压

Generic USB2.0-CRW [Smart Card Reader Interface]
Generic Smart Card Reader Interface [Smart Card Reader Interface]

智能卡简史

1970 年,日本 Kunitaka Arimura 博士申请了智能卡概念的第1个也是唯一的专利。

1974年,法国的Roland Moreno申请了IC卡的原始专利,后来被称为“智能卡”。当时的原型只是一个安全存储卡,并没有处理器。

1977年,三家法国公司Bull CP8,SGS Thomson和Schlumberger都开始开发IC卡。
其中,Honeywell Bull公司的Michel Ugon在1977年发明了第一次使用微处理器的智能卡,于1978年获得 self-programmable one-chip microcomputer (SPOM)专利。

1979年, 美国摩托罗拉公司 基于Michel Ugon的这个专利,开发了首个用于法国银行业的安全单芯片微控制器CP8.

1982年,法国开始IC卡电话测试,1983年用于payphone

1984年, 带芯片的ATM银行卡测试

1986年, Bull CP8在弗吉尼亚银行和马里兰国家银行分发了14,000张

1987年, 与美国农业部的全国性花生营销卡一起在美国实施了第一个大规模智能卡应用程序。

1991年, 德国慕尼黑智能卡制造商Giesecke&Devrient开发了第一张SIM卡,第一批300张SIM卡卖给了芬兰无线网络运营商Radiolinja。

1992年, 在丹麦启动了全国性的预付费(电子钱包)卡项目(DANMONT)。

1993年, 在法国雷恩对多功能智能卡应用程序进行了现场测试,其中在智能银行卡中启用了Telecarte功能(用于公用电话)。

1994年, Europay,MasterCard和Visa(EMV)发布了有关基于全球微芯片的银行卡(智能卡)的联合规范。

1995年, 全世界超过300万的数字移动电话用户开始使用智能卡(SIM卡)发起通话并为通话计费。

但ISO 7816国际标准的,主要雏形是 日本东芝公司的 JPN 2537199 号专利 Integrated circuit card,(priority date: 1986-06-20;publication date: 1996-07-08)

USA 5161231 号专利 Processing system which transmits a predetermined
error code upon detection of an incorrect transmission code,
(priority date: 1991-03-12;publication date: 1992-11-03).

7816-3: 接触卡 — 电气接口和传输协议

创建于 1989, 补充于 1992 (增加 T=1 协议),
再次补充于 1994 (修改了协议类型选择),
更新于 1997 (包含了 3V电压),
补充于 2002 (添加 1.8 电压),
最后更新时间是 2006 (移除 Vpp触点)

打包/解包中兴电信光猫 CTCE8 格式 cfg 配置文件工具

https://github.com/corberan/ctce8_cfg_tool

用法:
.\ctce8_cfg_tool.exe unpack “E:\e8_Config_Backup\ctce8_ZXHN_F450.cfg” ctce8_ZXHN_F450.xml
.\ctce8_cfg_tool.exe pack ctce8_ZXHN_F450.xml ctce8_ZXHN_F450.cfg “ZXHN F450”
pack 打包命令的第三个参数是光猫设备名,一般为配置文件名中的字段。如我得到的配置文件名为 ctce8_ZXHN_F450.cfg,那么这个字符串就是 “ZXHN F450″,注意中间是空格。

大神用rust写的工具

如果已经有web admin权限, 可进到“设备管理” usb备份配置
这里开启 telnet 权限

7816参数和协议选择PPS

Selection of transmission Parameters and protocol

在完成复位应答(ATR)后,卡应该等待从接口设备来的字符:
传输受传输参数(transmission Parameters)控制; 它们的解释受协议(protocol)约束。

如果ATR的TA2字段存在(也就是卡处于特定模式),那么接口设备应该用特定的传输参数来开始一个特定的传输协议。
否则(也就是卡处于协商模式), 那么 ATR期间使用的传输参数(也就是默认参数), 应该被继续使用, 以便接收 协商数据。
1. 如果卡在ATR之后收到的第1个字节是 FF, 那么接口设备应该开始了 PPS交换。默认的传输参数在PPS交换期间应该被继续使用,直到PPS交换成功。
2. 否则, 接口设备不支持PPS, 应该继续使用 默认参数。

如果卡受到 接口设备 发送的PPS字节后,如果能接受这个参数,也应回应同样的PPS字节给 接口设备。这样完成一次PPS协商。

7816接口集成电路卡/智能卡上电激活过程

卡片可以支持5V, 3V, 1.8V 的电压的一种或者多种。
如果支持多种,则必须连续。 也就是可以支持
5, 3, 1.8

5, 3

3, 1.8
但是,不能支持 5, 1.8 (这种是跳跃的)

如果接口设备 给卡指定了一种它能支持的电压, 那么卡就必须按这种电压操作。
如果接口设备支持多种电压, 实施这些电压的顺序,没有定义
一般来说,应该从低电压开始尝试。
但是, 因为所有的卡,都应该保护自己在高电压下不被损坏, 所以,即使从高电压开始尝试,也是符合规范的。

激活序列:
RST为低电平,
VCC加电(先1.8V,后3.3V,再5V)
I/O脚置于 接收模式, 也就是高电平. 但接口设备在激活过程中,要忽略I/O脚上的数据。
为CLK提供稳定的时钟信号。在复位应答期间,f在1~5MHz(5V卡), 1~4M(3V卡)

在给VCC上电,设置IO处于接收模式,提供时钟信号, 这几个操作间,应该存在一个延时。
但具体延时多长时间,没做定义,实现者自己把握。

————补充说明——————
SIM_IO的 输入(接收模式recption,一般此时接口设备来发送)
输出(发送模式transmission mode).

状态H- 如果卡和接口设备都处于接收模式(reception mode)
或者 发送方 强加此状态(trasmitter imposed this state), 也就是说 发送方,要发送1
状态L– 发送方 强制此状态, 也就是发送方要发送0
————补充说明完毕——————

在激活完成之后,准备冷复位
此时, RST处于低电平, VCC上电,IO处于高电平也就是接收模式,CLK提供了合适且稳定的时钟。

卡就准备好了冷复位。