智能 IC 卡技术杂谈

集成电路卡又称为 IC 卡(Integrated Circuit Card),是一种内嵌有集成电路的塑料标签卡片,其集成电路当中包含有 8 位或者 32 位的微控制单元 MCU、只读存储器 ROM、电可擦只读存储器 EEPROM(按字节操作)或者闪速存储器 Flash(按扇区操作)、随机访问存储器 RAM,以及固化在只读存储器 ROM 当中的片内操作系统(COS,Chip Operating System),并且通常内置有 DESRSA国密 SMxSSF 等加解密算法。

目前市场上主流的 IC 卡芯片有恩智浦 NXPMifare 系列、英飞凌 InfineonSL 系列、、复旦微电子FM 系列,华大半导体SHCCIU 系列除此之外,还有 华虹集成电路SHC 系列,以及大唐微电子DMT 系列,紫光国微THD 系列。这些芯片主要遵循 《ISO/IEC 7816》《ISO/IEC 14443 TypeA》两部协议规范,本文主要介绍了笔者在日常工作当中,经常接触到的各类智能卡相关的技术与规范。

阅读更多

玩转 Raspberry Pi 4B 开源硬件

万众期待的 Raspberry Pi 4B 终于发布,之前由于产品原型的需要,一直计划采购 3B+,后来供应商透露新版 4B 稍晚就会面市,所以稍微等待了一段时间,今天终于拿到了一块 2G 内存的板子。一直以为 4B 只会简单的更新一下 SoC 并增大 DDR 容量,但是实际上还带来了 Type-CBluetooth 5.0Micro HDMIUSB 3.0 乃至 DDR4 等诸多崭新升级。而官方推荐的应用范围,开始从教育渗透至工业领域,逐步发展为一套完整的嵌入式生态链。

本文基于树莓派基金会官方提供的 《Raspberry Pi Documentation》,笔者翻译了其中较为常用的配置章节,便于读者拿到板子以后能够快速上手,并避免使用一些官方不推荐的操作和工具库。此外,本文也会涉及 OpenCVdlib 的编译,以及 Electron 在树莓派上的部署等话题。文章内容将会伴随笔者的日常使用而长期进行更新,欢迎各位爱好者朋友持续关注与勘误。

阅读更多

基于 HAL 与 LL 的 UINIO-MCU-STM32F401 开发实践

相较于前一篇运用标准外设库(Standard Peripherals Library)开发的 STM32F403C8T6 微控制器,采用 UFQFPN48 封装的 STM32F401CCU6 则是基于 ARM Cortex®-M4 内核,内置有浮点运算单元(FPU,Float Point Unit)、自适应实时加速器(ART,Adaptive Realtime Accelerator)、数字信号处理器(DSP,Digital Signal Processor)指令,内置 16mHz 高速与 32kHz 低速晶体振荡器,工作时钟频率高达 84mHz,采用 1.7V ~ 3.6V 电源进行供电。

因为 STM32F401CCU6 提供了较大的数据与程序存储空间,所以本文将会基于意法半导体 ST 近年来主推的硬件抽象层HAL,Hardware Abstraction Layer)以及底层LL,Low-layer)开发库,并且结合 STM32CubeIDE 提供的便捷图形化配置工具。本文写作过程当中,参考了意法半导体的《STM32F401xC Data Sheet》《STM32F401xC Reference Manual》以及《Description of STM32F4 HAL & LL drivers》三份官方文档。

阅读更多

Android 物联网应用开发实例

Android 可以采用 Kotlin、Java、C++ 语言编写应用程序,Android SDK 会将这些代码连同相应的数据和资源文件编译为 Android 软件包,即一个带有.apk后缀的归档文件,也就是 Android 应用程序的安装文件。本质上 Android 系统是一种多用户的 Linux 系统,每个应用程序都运行在独立的 Linux 用户 ID进程之下,从而为每个 Android 应用都提供了独立的安全沙盒,体现了最小权限的设计原则。

鉴于 Google 官方提供了完善的文档,本文并不过多过深的涉及 Android SDK 开发的具体知识细节,仅会在简单介绍 Android 开发当中的一些基本概念之后,着重分析经典/低功耗蓝牙NFCWIFI指纹识别5G 等硬件外设的通信协议概念以及相应的实现步骤,并且展示一些比较典型的应用场景与示例代码,从而为读者在进行物联网相关项目的开发时,在移动设备应用控制端提供即有的现成经验。

阅读更多

STLink V2 调试编程器应用图解

STLink 是由意法半导体公司推出的在线调试编程器,采用5VUSB2.0全速接口进行供电与数据传输,可以方便的对内部固件进行升级,同时支持以 JTAGSWD 模式连接至 STM32 系列微控制器,或者以 SWIM 模式连接至 STM8 系列微控制器,操作温度介于0 ~ 50℃之间。由于 ST 公司极为重视中国市场,因此 STLink 的销售价格相对其它国外大厂的在线仿真设备要实惠许多,基本成为国内嵌入式工程师人手上必备的工具。

本文详细介绍 Keil uVision 5 开发环境下 ST-LINK/V2 版本的调试编程器使用方法,并介绍了相关接口的详细定义与接线方法,文中部分内容翻译至意法半导体官方提供的《用于 STM8 与 STM32 的 ST-LINK/V2 在线调试编程器用户手册》,以确保使用方法与解释的规范性。

阅读更多

J-Link 仿真器固件恢复小记

JTAG(Joint Test Action Group,联合测试行动组)是一种用于芯片内部测试的国际标准协议,ARMDSPFPGA等主流 IC 都对其提供了良好支持,标准 JTAG 接口拥有TMS模式选择、TCK时钟、TDI数据输入、TDO数据输出共 4 条信号线。笔者当前使用的 Mini2440 开发板原厂提供的 JTAG 调试器是采用并口的H-JTAG,由于现在的计算机设备早已经不提供并口支持,因此笔者选择了较为通用的J-Link作为 ARM9 仿真调试器。

J-Link是德国SEGGER公司推出的一款专用于 ARM 内核微控制器的 JTAG 仿真调试设备,能够与 ARM 官方提供的 Keil 集成开发环境无缝衔接,支持 Cortex-A/R、Cortex-M、ARM7、ARM9、ARM11、Renesas RX、Microchip PIC、Silicon Labs 8051、RISC-V 等系列的微控制器。笔者 7 年前购置了一台 J-Link V8 版本的J-Link调试器,当时由于使用不当造成固件丢失,因此特别撰写此文来记录一下固件恢复的过程。

阅读更多

玩转 Arduino Uno/Mega 和 UINIO-MCU-ESP32 开源硬件

Arduino 是一款非常流行与成熟的电子原型评估套件,其 PCB 硬件IDE 集成开发环境板级支持包 全部基于开源共享协议,其中,Eagle 原理图以及 PCB 布线遵循 CC BY-SA 共享协议,而 IDE 集成开发环境的源代码基于 GPL 开源协议,微控制器 MCU 的 C/C++ 板级支持包则是基于 LGPL 开源协议。自从 2005 年第一款 Arduino 开发板面世以来,官方已经推出了琳琅满目的各类硬件以及软件包,叠加各大芯片厂商的助力,整个开源社区的氛围日趋活跃与丰富。

本文首先从入门级的 Arduino Uno 入手,然后逐步过渡至片上资源更为丰富的 Mega 2560,两款都是由 Arduino 官方所推出的 5V 供电电压的开发板。最后引入了携带有 Wifi/Bluetooth 无线接入能力的 ESP8266ESP32,而它们则是采用了国产 3.3V 芯片的开发板,由于开源社区或者芯片原厂提供了兼容 Arduino API 的板级支持包,在较为丰富功能的基础上提供了相对低廉的价格,叠加 Arduino 较为成熟的开发环境,更是加速了 Arduino 的应用与普及。

阅读更多

意法半导体 UINIO-MCU-STM32F103 标准库典型实例

博主之前文章介绍的STC51系列单片机是一款结构简单、易于学习的嵌入式微控制器,但是由于标准 8051 架构诞生于 70 年代,其硬件架构、资源数量以及编程方式都已显老旧,成本和性能方面也皆落后于其它架构产品,市场占有率逐步遭到侵蚀,目前仅常见于一些教学与发烧友使用的范畴。伴随近几年物联网行业的快速兴起,STM32等基于 ARM Cortex 内核的微控制器,凭借丰富的片上资源与简单易用的标准外设库,逐步成为消费与工业领域中的主流产品。

意法半导体成立于 1987 年,由意大利 SGS 和法国 Thomson 两家半导体企业合并而成,本文所介绍的STM32F103C8T6属于该公司应用极为广泛的型号,其提供的STM32F10x Standard Peripheral Library标准外设库对 STM32 片上资源进行了完善的封装,相对于 ST 公司目前力推的HAL/LL库,标准外设库更加接近于传统的寄存器操作,因而也较为容易向兆易创新GD32等国产微控制器移植。

阅读更多

宏晶 STC89C52RC 微控制器实践小书

伴随 NB-IOT、LoRa、5G 等无线物联网通信技术的快速成熟,已经诞生近四十余年的 8051 系列微处理,在功耗、性能、开发难易程度方面,已然全面落后于 ARM Cortex-M3 等主流嵌入式微控制器方案。但是由于其技术架构较为经典,寄存器配置相对简洁,在一些低成本场景中依然有所沿用。笔者当前使用的开发板基于宏晶STC89C52RC嵌入式微控制器方案,虽然购置于六年以前,但是依然集成有各类常用的 UART、I²C、SPI 总线模块。

笔者日常开发工作当中,经常需要使用到此类嵌入式总线通信协议,因此参考了官方文档以及相关技术资料,逐步将本文涉及的各类模块驱动移植至当前开发板,便于用作与其它嵌入式设备联调测试之用。近几年,意法半导体的STM32F103C8T6量产价格不断下探,已经逐步接近宏晶的STC8051系列产品,可以预见后者将会逐渐面临市场淘汰,作为一款极为经典的 8 位微控制器,用作测试和实验目的依然是不错的选择。

阅读更多

基于三星 S3C2440 的嵌入式 Linux 攻略

由于 Linux 操作系统内核具备可裁剪定制的特性,因而能够运行于 ARM 架构的嵌入式设备当中。伴随近几年,硬件性能的飞速提升以及价格的快速下降,Raspberry PiNano PiRock PiOrange Pi等可运行完整桌面 Linux 操作系统的卡片电脑大量涌现,通用计算机与嵌入式系统之间的界限愈来愈模糊。各个 IC 厂家不断提升 MCU 性能的同时,也推出了相应的公版外围电路、通用操作系统、驱动程序支持等一揽子完善的嵌入式技术解决方案,与笔者七年以前接触嵌入式技术伊始,早已经不可同日而语。

笔者手上这款 Mini2440 开发板于 2013 年购置,是由广州友善电子科技有限公司于 2010 年推出的 ARM9 开发板,虽然板载的三星 S3C2440 嵌入式微处理器已然廉颇老矣,且对应的Linux 2.6.32.2内核版本也早已壮士暮年。但由于最近涉及 Linux 嵌入式操作系统相关的工作,因此重新上电使用,同时以怀旧心态执笔撰写本文,用于记录一些心得体会,同时也作为日后备忘。

阅读更多