作者归档:softsim
DAP调试适配器协议
在IDE或编辑器中添加针对新语言的调试器不仅是一项艰巨的工作,而且令人沮丧的是,由于每个工具都使用不同的API来实现相同的功能,因此无法轻易在多个开发工具上分摊此工作。
调试适配器协议(DAP)背后的思想是将开发工具的调试支持与调试器或运行时进行通信的方式抽象为协议。由于假定现有的调试器或运行时在任何时候都采用此协议是不现实的,因此我们假定中介组件(即所谓的调试适配器)使现有的调试器或运行时适应调试适配器协议。
调试适配器协议使为开发工具实现通用调试器成为可能,该工具可以通过调试适配器与不同的调试器进行通信。调试适配器可以在多个开发工具中重复使用,从而大大减少了在不同工具中支持新调试器的工作。
调试适配器协议对调试器提供商和工具提供商而言都是双赢!
CMSIS-DAP是用于将调试端口连接到USB的调试单元的接口固件。 在主机上执行的调试器通过USB连接到调试单元和运行应用程序软件的设备。 调试单元通过JTAG或SW连接到目标设备。 ARM Cortex处理器提供CoreSight调试和跟踪单元。 CMSIS-DAP支持包含一个或多个Cortex处理器的目标设备。 这里,DAP是Debug Access Port的意思 CMSIS-DAP提供了一种通过USB访问ARM Cortex微控制器的Coresight调试访问端口(DAP)的标准化方法。 CMSIS-DAP通常实现为板载接口芯片,通过开发板与一侧运行在主机上的调试器之间通过JTAG(联合测试操作组)或SWD(串行线调试)提供直接USB连接。 目标设备访问另一台上的Coresight DAP。 为什么需要CMSIS-DAP?
有关引入CMSIS-DAP的原因有很多: 在CMSIS-DAP标准之前,许多USB wigglers都实现了自己的协议。使用这种配置,主机调试器必须了解这些不同的协议,并且必须实现所有这些协议,这会产生很多碎片并重新发明轮子。同时,协议通常是在JTAG级别定义的,这意味着它们很慢。 CMSIS-DAP为调试器提供了标准化的接口,该接口在Coresight DAP级别上定义,允许使用标准接口和快速的无驱动程序实现。
借助新的CMSIS-DAP层,主机调试器可以通过SWD或JTAG调试目标,而无需实现这两个协议
USB连接使用HID驱动程序类。由于每个操作系统都内置了HID驱动程序,因此无需在主机上安装特定的驱动程序。 CMSIS-DAP如何集成?
如前所述,CMSIS-DAP必须在接口芯片上实现。该芯片提供了主机计算机(例如,通过USB)和必须调试的目标(通过SWD或JTAG)之间的链接。 CMSIS-DAP标准概述
数据包在主机调试器和接口芯片之间交换。基本上,主机发送命令,调试单元发送命令响应。
主机可以发出不同类型的命令:
通用命令:请求信息并控制调试单元。也用于连接/断开调试单元。
常见的SWD / JTAG命令:例如用于设置时钟速度
SWD特定命令:配置SWD模式的参数
JTAG特定命令:配置JTAG设备链
传输命令:读/写CoreSight寄存器。这些命令与传输方式无关(SWD或JTAG)
示例:通过CMSIS-DAP读取内存
假设调试器需要读取内存中特定位置的值。主机必须发送以下命令:
传输命令:写入CSW寄存器(控制/状态字寄存器)。这将配置传输(32位/ 16位/ 8位传输)
传输命令:使用存储单元的地址写入TAR寄存器(传输地址寄存器)
传输命令:读取DRW寄存器(数据读取/写入寄存器)以读取先前指定位置的值
结论
CMSIS-DAP为调试器提供了标准化的接口。它可能会成为调试器和调试单元将要实现的实际标准。
JTAG/SWD口作为GPIO使用而不能调试
在 STM32F4xx 中,可通过 BOOT[1:0] 引脚选择三种不同的自举模式 boot0 = 0, 主Flash boot0=1, boot1=0 系统存储器 boot0=1, boot1=1 嵌入式SRAM 复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。复位后,用户可以通过设置BOOT1 和 BOOT0 引脚来选择需要的自举模式。BOOT0 为专用引脚,而 BOOT1 则与 GPIO 引脚共用。一旦完成对 BOOT1 的采样,相应GPIO 引脚即进入空闲状态,可用于其它用途。器件退出待机模式时,还会对 BOOT 引脚重新采样。因此,当器件处于待机模式时,这些引脚必须保持所需的自举模式配置。这样的启动延迟结束后,CPU 将从地址 0x0000 0000 获取栈顶值,然后从始于 0x0000 0004 的自举存储器开始执行代码。 注意:
如果器件从 SRAM 自举,在应用程序初始化代码中,需要使用 NVIC 异常及中断向量表和偏移寄存器来重新分配 SRAM 中的向量表。 64 KB CCM (内核耦合存储器)数据 RAM 不属于总线矩阵, 只能通过 CPU 对其进行访问(CPU D总线) 选择自举引脚后,应用程序软件可以将某些存储器设定为从代码空间进行访问(这样,可通过ICode 总线而非系统总线执行代码)。这样的修改通过在 SYSCFG 控制器中编程 SYSCFG 存储器重映射寄存器 (SYSCFG_MEMRMP) 来实现。
- 使用两个位来配置可在地址 0x0000 0000 访问的存储器区域。从而通过软件选择物理重映射,而旁路 BOOT 引脚。
- 这两个位的复位值和复位时 BOOT 引脚的设置相同。当 BOOT 引脚设为 10 [(BOOT1,BOOT0)= (1,0)] 从主 Flash 中自举时,寄存器值为 0x00. 也就是boot引脚的值,被忽略,用寄存器的值代替。
偏移地址:0x00
复位值:0x0000 000X(X 和 BOOT 引脚的设置相同) STM32F4xx 内核集成了串行 /JTAG 调试端口 (SWJ-DP) 默认调试接口是 JTAG 接口。如果调试工具想要切换到 SW-DP, 它必须在 TMS/TCK(分别映射到 SWDIO 和 SWCLK)
上提供专用的 JTAG 序列, 用于禁止 JTAG-DP 并使能 SW-DP。这样便可仅使用 SWCLK和 SWDIO 引脚来激活 SWDP。
该序列为:
- 输出超过 50 个 TCK 周期的 TMS (SWDIO) = 1 信号
- 输出 16 个 TMS (SWDIO) 信号 0111100111100111 (MSB)
- 输出超过 50 个 TCK 周期的 TMS (SWDIO) = 1 信号
脚,可供调试工具立即使用(请注意,除非由调试工具明确编程,否则不分配跟踪输出)。
但是,STM32F4xx MCU 可以禁止部分或全部 SWJ-DP 端口,进而释放相关引脚以用作通
用 IO (GPIO)。 调试时,主机执行以下操作:
注意:
● 在系统复位状态下,分配所有 SWJ 引脚 (JTAG-DP + SW-DP)。
● 在系统复位状态下,调试主机发送 JTAG 序列,以从 JTAG-DP 切换到 SW-DP。
● 仍然在系统复位状态下,调试主机在复位地址处设置断点。
● 释放复位信号,内核停止在复位地址处。
● 从此所有调试通信均使用 SW-DP 完成。然后通过用户软件将其它 JTAG 引脚重新分配为 GPIO。


SWD调试接口
SEGGER Embedded Studio链接与段布置
以AT91SAM7S256为例用Keil MDK创建从RAM启动的简单应用
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,选择存储位置








选中 Use ULink2/ME ARM Debugger, 取消 选择 Load Application at Startup, 添加Initilization File, 选择 RAM.ini


用AT91SAM7S256做sim卡或读卡器

屏蔽运营商本机号码自动登录
移动
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
————-
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触点)