前期工作

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。

最新文章

  1. HDU 1690 Bus System
  2. Dapper with MVC MiniProfiler
  3. Centos7下配置Tomcat7以指定(非root)身份运行
  4. iis实现类似tomcat ip:port直接访问站点
  5. Jquery 等待ajax返回数据loading控件ShowLoading组件
  6. [Angular 2] Factory Provider
  7. 未能找到类型或命名空间名称DbContext
  8. 黑马程序员_JavaIO流(三)
  9. Linux企业级项目实践之网络爬虫(4)——主程序流程
  10. 动态创建ImageView
  11. MC 在1分钟图拿出5分钟,15分钟,30分钟,1小时的K线
  12. 二分查找javascript
  13. CSS都有哪些选择器?
  14. session和cookie的辨析[阅读]
  15. Zara带你快速入门WPF(4)---Command与功能区控件
  16. 监听 在xshell中
  17. 前端修炼の道 | &lt;div&gt; 标签简介
  18. leetcode473 Matchsticks to Square
  19. 观察者模式之一:java实现观察者模式
  20. zabbix触发器函数 count

热门文章

  1. python与数值计算环境安装
  2. [编程基础] C++多线程入门7-条件变量介绍
  3. cookie、session,、token,还在傻傻分不清?
  4. 10分钟做好 Bootstrap Blazor 的表格组件导出 Excel/Word/Html/Pdf
  5. 《深度探索C++对象模型》第三章 Data语意学
  6. os 模块 sys模块 json模块
  7. 结构型模式 - 组合模式Composite Pattern
  8. Unity_UIWidgets - 组件Container
  9. 编程哲学之 C# 篇:006——什么是 .NET
  10. spring cloud alibaba - Nacos 下载安装