arduino 使用多个SPI设备 how to running multiple SPI device on arduino

how to running PN532 and W5100 on same board 最近研究arduino开发板,尝试将NFC板(PN532)和网络扩展板(w5100)组合在一起,碰到个问题,这两块板子都是通过SPI总线和arduino通信,同时占用pin10,11,12,13三个口,其中10是片选信号SS。这两个设备始终无法同时工作,出现很多莫名其妙的问题。 比如我编译IDE自带的webserver程序,设置了ip地址为192.168.1.15,启动以后,ping 192.168.1.15可以通,但在串口接收到 ip地址为192.139.1.15,甚至是192.192.192.192,或者其他乱七八糟的地址。在PC上访问http://192.168.1.15无法打开。拔除NFC扩展板,web访问正常。然后开始漫长google之路。 参考链接 http://arduino.cc/en/Main/ArduinoEthernetShield 1.首先确认两个设备不能使用同一个SS pin,将nfc的nss针插到其他pin(貌似1,2,4,不能使用,4是SD卡的片选),我选择5,然后在arduino的setup里面增加 pinMode(5,OUTPUT); digitalWrite(5,HIGH); 测试同时连接NFC和网络,只初始化网卡,webserver正常;如果同时初始化网卡和NFC,依旧无法访问webserver 参考链接 http://www.circuitsathome.com/mcu/running-multiple-slave-devices-on-arduino-spi-bus 2.继续google,发现两个设备的setBitOrder似乎不同,PN532是LSBFIRST,而网络是WSBFIRST, 找到原因后就简单了,只需要启动不同设备的时候,不仅仅设置SS,还要重新设置SPI的参数。 找到PN532.cpp的begin(),大约在43行,将 pn532_SPI.setDataMode(SPI_MODE0); pn532_SPI.setBitOrder(LSBFIRST); /*Set the SPI frequency to be one sixteenth of the frequency of the system clock*/ pn532_SPI.setClockDivider(SPI_CLOCK_DIV16); 注释掉,然后在自己的程序里面分别写上 void enablePN() { digitalWrite(ETH_SS, HIGH); digitalWrite(NFC_SS, LOW); SPI.setDataMode(SPI_MODE0); SPI.setBitOrder(LSBFIRST); SPI.setClockDivider(SPI_CLOCK_DIV16); delay(10);… Continue reading arduino 使用多个SPI设备 how to running multiple SPI device on arduino

Raspberry Pi 使用NFC模块读取标签

使用网上的教程,链接 http://www.geek-workshop.com/thread-10042-1-1.html 。 原文包含SPI和I2C总线两种方式,因为我不想插上一大把线,所以只用了I2C接口,所以内容有删节。 libnfc是首个遵循GNU(自由工程项目)通用公共许可证针对所有人都完全免费的低级别NFC软件开发包和编程应用程序接口。它提供了完整的透明度且免费供大家使用。该库目前支持调制ISO / IEC14443 A和B,FeliCa,Jewel/Topaz标签及数据交换协议(P2P)作为目标和启动程序。想了解更多关于libnfc的信息,可参考http://nfc-tools.org/ITEAD PN532 NFC模块配有双排引脚,可直接通过排线连接到树莓派,然后树莓派将驱动模块进行非接触式近场通信操作,如读写13.56M IC卡。 以下教程,演示如何在树莓派上使用libnfc通过SPI总线来驱动ITEAD PN532 模块。 1, 硬件链接 Itead PN532 Module是使用四条线连接,如下图 按照上图的连接方式,Itead PN532 模块是通过SPI总线与树莓派连接的,所以需要把NFC模块的工作模式设置为I2C模式,如下图: 即 :  SET0–>H   SET1–>L 2,安装依赖的软件包 sudo apt-get update sudo apt-get install libusb-dev libpcsclite-dev 3,下载并解压缩libnfc源码包 cd ~ wget http://dl.bintray.com/nfc-tools/sources/libnfc-1.7.1.tar.bz2 tar -xf libnfc-1.7.1.tar.bz2 4,编译与安装 cd libnfc-1.7.1 ./configure –prefix=/usr –sysconfdir=/etc make sudo make install 5, 修改配置文件 cd… Continue reading Raspberry Pi 使用NFC模块读取标签