前期工作

orangepi 3 lts使用全志的H6芯片,通过查询该芯片的datasheet和user manual,可以发现H6有两个scr接口,分别为scr0和scr1,理论上是支持读卡器接口的,现在的问题是orangepi 3 lts是否将该接口引出来。



继续查询官方提供的板子原理图《orange_pi_3_LTS_原理图_v1.4》,可以发现scr1的部分管脚已经引出到26pins的扩展管脚中,并且引出的管脚足以满足读卡器的正常使用。通过下图可以看到SCR1的clk、data、rst管脚已经引到PH3、PH4、PH5中。



在管脚接线图下图可以看PH3、PH4、PH5、PH6管脚已经默认分配给SPI了,如何将已经分配给SPI的管脚分配给SCR1呢?在H6中,大多管脚是多个功能模块共用,即若将PH3、PH4、PH5、PH6分配给SCR1,则无法使用SPI功能,见下图。

修改设备树

现在,需要先关闭SPI模块,以下操作仅以linux4.9为准。orangepi官方提供debian有4.9和5.10,其中5.10设备树新增了overlay功能,SPI默认关闭,而4.9则需要修改手动设备树。将spi@05011000节点中的status字段改为disabled即可。

spi@05011000 {
#address-cells = <0x1>;
#size-cells = <0x0>;
compatible = "allwinner,sun50i-spi";
device_type = "spi1";
reg = <0x0 0x5011000 0x0 0x1000>;
interrupts = <0x0 0xb 0x4>;
clocks = <0x2 0x73>;
clock-frequency = <0x5f5e100>;
pinctrl-names = "default", "sleep";
spi1_cs_number = <0x1>;
spi1_cs_bitmap = <0x1>;
status = "disabled";
pinctrl-0 = <0xfc 0xfd>;
pinctrl-1 = <0xfe 0xff>; spi_board0 {
device_type = "spi_board0";
compatible = "rohm,dh2228fv";
spi-max-frequency = <0x124f80>;
reg = <0x0>;
};
};

现在,还需将scr模块启用。找到smartcard@0x05005400节点并将节点改为如下所示。这里讲一下为什么不是直接将status字段改为okay就行了。之前说过,只有部分scr的管脚被引出到26pins中,其他scr管脚PH0、PH1、PH2中,PH2没有被引出,而PH0、PH1被引到了调试串口的管脚上,即板子上三个管脚连在一起的那个地方。如果把PH0、PH1绑定到scr中,调试串口就无法使用了,这不是一个好的点子,并且PH0、PH1并不影响scr的正常使用,仅在SIM编程时需要用到。所以设备树还需要需改一下管脚关联属性,使其与PH0和PH1解绑。

smartcard@0x05005400 {
#address-cells = <0x1>;
#size-cells = <0x0>;
compatible = "allwinner,sunxi-scr";
device_type = "scr1";
reg = <0x0 0x5005400 0x0 0x400>;
interrupts = <0x0 0x9 0x4>;
clocks = <0xb2 0xae>;
clock-frequency = <0x16e3600>;
//pinctrl-names = "default", "sleep";
pinctrl-names = "default";
//pinctrl-0 = <0xb3 0xb4>;
pinctrl-0 = <0xb3>;
//pinctrl-1 = <0xb5>;
status = "okay";
};

设备树修改完成后,需要重新编译一下并覆盖原来的设备树(/boot/dtb/sunix/sun50i-h6-orangepi-3-lts.dtb)。编译命令如下。覆盖后就可以重启等待设备树生效。

dtc -I dts -O dtb -o sun50i-h6-orangepi-3-lts.dtb sun50i-h6-orangepi-3-lts.dts

设备树生效后,理论上在/dev目录下可以看到smartcard设备节点。

scr驱动

现在系统已经识别到设备了,还需要相应的驱动才能正常工作。一开始在查看linux 5.10的源码时,并没有发现相应的scr驱动,打算自己对照datasheet写一份简单的驱动。后来由于某种原因,我将orangepi上的系统换成了4.9,并在4.9的源码中找到了scr驱动,并且4.9系统已经自带编译好的驱动,一旦系统识别到scr设备就会自动加载该驱动。使用lsmod命令看一下已经加载的驱动,正好发现scr.ko已经被加载,现在可以对/dev/smartcard进行读写操作了。

SIM模块

现在软件端已经准备就绪,就差硬件端。从淘宝上买个SIM卡座转接板和几根杜邦线。



按照H6的datasheet和orangepi的原理图,连接对应管脚(对应关系见上面管脚接线图)。注意,我买的SIM卡座没有detect管脚,该管脚用于检测SIM是否插入,所以直接将该管脚接地即可。



接下来就是让人迫不及待的测试,经过相应的测试,在orangepi 3 lts上使用读卡器设备是完全可行的。相关代码在点击此处

后记

以上所有实验均在orangepi 3 lts板子上进行,使用的操作系统是官方提供debian linux4.9。至于debian linux5.10应该也是可行的,可以把4.9的scr.ko放到5.10使用,而且5.10可以使用更为方便的overlay功能来修改设备树。至于其他型号的orangepi,只要是全志H6,管脚引出没问题,根据以上流程也是可行的。而使用其他核心soc的板子,则要查阅datasheet是否支持scr。

在orangepi 3 lts上使用SmartCardReader(读卡器)的更多相关文章

  1. 在Ubuntu 16.04 LTS上用g++和gcc编译C/C++代码错误提示“.../x86_64-linux-gnu/crt1.o: ELF section name out of range”

    (有一些图片我是直接从个人的CSDN博客上复制来的) 最近一个多月来,我曾经多次尝试在Ubuntu 16.04 LTS上使用g++和gcc(这俩好像合起来叫MinGW?)来编译C/C++代码,但是在解 ...

  2. 如何在Ubuntu 18.04 LTS上安装和配置MongoDB

    MongoDB是一款非关系型数据库,提供高性能,高可用性和自动扩展企业数据库. MongoDB是一个非关系型数据库,因此您不能使用SQL(结构化查询语言)插入和检索数据,也不会将数据存储在MySQL或 ...

  3. Ubuntu 16.04 LTS上git提交出现警告Warning: Permanently added 'github.com,52.74.223.119' (RSA) to the list of known hosts. 的解决方法

    问题: Ubuntu 16.04 LTS执行 git pull时总会出现以下警告: Warning: Permanently added 'github.com,52.74.223.119' (RSA ...

  4. Ubuntu 12.04.5 LTS 上安装hadoop 2.6.0后运行自带的例程wordcount

    注:我所有的操作均通过Xshell 5远程连接Ubuntu进行实施 第一步:启动hadoop,利用jps查看hadoop是否已经启动,如果没有启动用start-dfs.sh脚本启动(hadoop2.X ...

  5. OpenCL科普及在ubuntu 16.04 LTS上的安装

    OpenCL(Open Computing Language,开放计算语言)是一个为异构平台编写程序的框架,此异构平台可由CPU.GPU.DSP.FPGA或其他类型的处理器與硬體加速器所组成.Open ...

  6. Ubuntu16.04 LTS上安装Go1.10

    原因 Ubuntu资源库上默认使用的是Go1.6.2版本,给最新版本代码编译带来了不少问题.本文就记录下在Ubuntu下直接安装Go最新版1.10的步骤. 准备工作 1.卸载已有版本 # 卸载已经安装 ...

  7. 在 Ubuntu 16.04 LTS 上 离线安装 Docker / Docker-compose

    前情提要 今天上班后,突然接到现场的工程师的电话: XXX的现场环境组的的局域网,上不了互联网.bla bla bla..... 如果需要安装其他软件的话,只能是自己带过去安装... 听完现场工程师的 ...

  8. 在 Ubuntu 16.04 LTS 上安装 Python 3.6.0

    原文连接:https://segmentfault.com/a/1190000007912666 最近 Python 3 发布了新版本 Python 3.6.0,好像又加入了不少黑魔法!- 由于暂时不 ...

  9. 【转】如何在Ubuntu 14.04 LTS上设置Nginx虚拟主机

    介绍 转自http://www.pandacademy.com/%E5%A6%82%E4%BD%95%E5%9C%A8ubuntu-14-04-lts%E4%B8%8A%E8%AE%BE%E7%BD% ...

  10. Ubuntu 18.04 LTS上安装NFS服务器和客户端

    NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器.操作系统以及低层传送协议无关的存取远程文件的操作.RPC采用了XDR的支持.XDR是一种与机器无关的 ...

随机推荐

  1. QT中常用控键

    1.TableWidget类 1.1. 表格属性设置 1.1.1设置行列属性 //设置行列均分 tableWidget->horizontalHeader()->setStretchLas ...

  2. 【环境搭建】RocketMQ集群搭建

    前置条件及效果图 条件: 两台服务器,个人是两台腾讯云服务器(其中嫖的朋友一个): 版本: rocketmq-version:4.4.0 rocketmq-console(mq控制台) Java:1. ...

  3. django中只使用ModleForm的表单验证,而不使用ModleForm来渲染

    主题 众所周知,django.forms极其强大,不少的框架也借鉴了这个模式,如Scrapy.在表单验证时,django.forms是一绝,也是面向对象的经典表现.但要用它来渲染表单那就不好玩了,除非 ...

  4. 【WPF】自定义一个自删除的多功能ListBox

    原文地址 https://www.cnblogs.com/younShieh/p/17008534.html 如果本文对你有所帮助,不妨点个关注和推荐呀,这是对笔者最大的支持~ 我需要一个ListBo ...

  5. 诗词API

    1.js依赖 /** * 今日诗词V2 JS-SDK 1.2.2 * 今日诗词API 是一个可以免费调用的诗词接口:https://www.jinrishici.com */ !function(e) ...

  6. 安装pytorch-gpu的经验与教训

    首先说明 本文并不是安装教程,网上有很多,这里只是自己遇到的一些问题 我是以前安装的tensorflow-gpu的,但是发现现在的学术论文大部分都是用pytorch复现的,因此才去安装的pytorch ...

  7. Python从零到壹丨图像增强及运算:图像掩膜直方图和HS直方图

    摘要:本章主要讲解图像直方图相关知识点,包括掩膜直方图和HS直方图,并通过直方图判断黑夜与白天,通过案例分享直方图的实际应用. 本文分享自华为云社区<[Python从零到壹] 五十二.图像增强及 ...

  8. 【一句话】:first-child 伪类解释

    关键词 不起作用 选不到 失败 解释 input:first-child 要求既是input元素,而且是兄弟节点中的第一个 如果要找第一个input元素,那么用input:first-of-type ...

  9. DVWA靶场实战(十四)——JavaScript

    DVWA靶场实战(十四) 五.Java Script: 1.漏洞原理: 这里的JavaScript其实是JavaScript Attack也就是JS攻击.JavaScript是一种基于对象和事件驱动的 ...

  10. FAS2720 配置

    FAS 2720配置操作 第1章 初始化 1.1设备物理安装 1.1.1组件介绍 机头FAS 2720 (2U)   前面板 后面 1.1.2准备工作 (1)工具准备 螺丝刀.网线.Console线. ...