arduinoUNO 用两个PIN控制一个spi设备(RFID)-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10541|回复: 11

[过期] arduinoUNO 用两个PIN控制一个spi设备(RFID)

[复制链接]
发表于 2020-10-1 21:00 | 显示全部楼层 |阅读模式
本帖最后由 vvind2008 于 2021-1-3 11:13 编辑

我已经测试,MRFC522的chipSelectPin 是正常的。当pin为低电平时可以正enable并都读写数据。

目前的问题是,我需要用两个接口来控制他。当两个接口都为低电平时,MFRC522才ENABLE。只要任意个接口为高电平,MFRC522都为不可用。

所以我想是用二极管做个或门电路。如图所示。
实际上的确P11和P12任意一个或两个为高电平时,输出高电平;两个都为低电平时,输出低电平。
已经修改了RFID.cpp的代码:
void RFID::setmode(boolean isHigh){
  if(isHigh){
     digitalWrite(11, HIGH);
     digitalWrite(12, HIGH);
  }else{
     digitalWrite(11, LOW);
     digitalWrite(12, LOW);
  }
}

但是接上MRFC522,无法进行读写。
烦请大神帮忙看看,问题出在哪里?


捕获.PNG
发表于 2020-10-1 21:49 | 显示全部楼层
SS下拉电阻呢?
 楼主| 发表于 2020-10-1 22:49 | 显示全部楼层

谢谢,我接了个1K电阻,可以用了!!
 楼主| 发表于 2020-10-20 21:47 | 显示全部楼层
本帖最后由 vvind2008 于 2020-10-20 22:47 编辑

大哥,补充点问题。上面的问题,当我接一个SS时,用1K或4.7K的下拉都是很OK的。
但当我把二极管或门电路改为4*4矩阵,以便用8个PIN控制16个SS。这时就有点行不通了。
我用1K到10K的下拉都不行。不知道是不是多个下拉共地的缘故。

Schematic_矩阵电路_2020-10-20_22-41-41.png
发表于 2020-10-20 22:46 | 显示全部楼层
vvind2008 发表于 2020-10-20 21:47
大哥,补充点问题。上面的问题,当我接一个SS时,用1K或4.7K的下拉都是很OK的。
但当我把二极管或门电路 ...

应该和扫描时序有关。一次选通单个 SS=LOW 应该可以的
 楼主| 发表于 2020-10-20 23:00 | 显示全部楼层
本帖最后由 vvind2008 于 2020-10-20 23:11 编辑
t3486784401 发表于 2020-10-20 22:46
应该和扫描时序有关。一次选通单个 SS=LOW 应该可以的

除了需要读写的SS对应的行和列设为LOW以外,其他行列都是HIGH。不加负载时检查电平也是OK的。
直接一个负载没问题,可以读写,再加一个就不行了。就是说我程序不改,一直两个负载轮流切换读写。只插任意一个都可以读写,两个同时插上就不行。

我对下拉那一段不太懂,而且读写时电平多次切换,用我几十块钱的万用表实在测不准。
发表于 2020-10-20 23:17 | 显示全部楼层
vvind2008 发表于 2020-10-20 23:00
除了需要读写的SS对应的行和列设为LOW以外,其他行列都是HIGH。不加负载时检查电平也是OK的。
直接一个负 ...

SPI 端口不一定支持多从机模式,需要器件配合。

这个情况,很可能是 MISO 线在 SS 无效时,没有释放电平,导致其他 SPI 从机无法通信。
 楼主| 发表于 2020-10-20 23:27 | 显示全部楼层
t3486784401 发表于 2020-10-20 23:17
SPI 端口不一定支持多从机模式,需要器件配合。

这个情况,很可能是 MISO 线在 SS 无效时,没有释放电平 ...

我试过不用或门,直接用两个pin口接SS,MISO等其他线共用,是可以实现轮流读写的。
您说的这种情况,我没想到,有没有什么方法可以验证一下?
发表于 2020-10-20 23:45 | 显示全部楼层
vvind2008 发表于 2020-10-20 23:27
我试过不用或门,直接用两个pin口接SS,MISO等其他线共用,是可以实现轮流读写的。
您说的这种情况,我没 ...

禁用一片 RC522(使 SS=H),测试 MISO 引脚电压:

1. 如果 =0V,搞个电流表串 1k 电阻,测试 MISO-VCC 之间的电流,能接近 -5mA 就判定 MISO 未释放;
2. 如果 =5V,同样电流表串 1k 电阻,测试 MISO-GND 之间的电流,能接近 +5mA 判定 MISO 未释放;
3. 如果 MISO 电压是其他数值,或者电流表测不到电流,判定 MISO 已释放。

目测你能测出 MISO 未释放的情况
 楼主| 发表于 2020-10-21 20:33 | 显示全部楼层
t3486784401 发表于 2020-10-20 23:45
禁用一片 RC522(使 SS=H),测试 MISO 引脚电压:

1. 如果 =0V,搞个电流表串 1k 电阻,测试 MISO-VCC  ...

谢谢,我需要搭建测试下。
我理解一下您的思路:
当RC522禁用的时候,MISO内部应该高阻抗无电流通过。否则其未彻底释放。
所以连接AB两个模块,保持A禁用,测量在B禁用及读写等各种情况下A的MISO的电流值。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 16:48 , Processed in 0.080613 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表