Arduino Leonardo 与 ENC28J60 网路模组连接

Arduino Leonardo 与 ENC28J60 网路模组连接

关于Arduino的资讯大都是以Arduino UNO(Due)或Arduino Mega为主,当您使用的版本是其他版本时就要注意硬体的输出脚位对应的名称是否正确,像这次使用的是Arduino Leonardo版本就与UNO有点出入,在与ENC28J60这块网路模组连接时就要注意。

ENC28J60

EN28J60是Microchip所推出的10Mbit/sec速度的网路晶片,它使用SPI的介面与晶片沟通,所以在使用上非常方便,一开始最常被用在8051的MCU上增加网路功能,现今因为Arduino的关系,让它又再度继续被使用,虽然它推出已经非常久,网路速度只有10Mbit/sec,但使用在数据回报与构通的一般装置上仍然是个非常不错的选择。

下载:ENC28J60 简中说明

UNO(Due)/Mega 的接法

网路上已经有非常多的教学告诉我们如何与UNO(Due)/Mega的接法,下面这张是从网路上撷取下来的:

表格中有提供Pin脚编号以及名称,照着表格上接好就完成连接(提供表格的已经查过相关资讯,所以照接就完成),不过当你的版子与并非表格上所提到的,那就要注意ENC28J60的接脚原始名称,例如:MISO、MOSI、SCK这些,后面我们会告诉您利用这个在Arduino的电路图中寻求答案。

Leonardo 的接法

了解如何接线之前必需要先到Arduino官网先查询Leonardo的资讯:

下载电路图并开启它后寻找电路图上的MISO、MOSI、SCK位置:

从上图得到这几个接脚目前只有接到ICSP,并非像UNO有共用接脚,下图是UNO的电路图:

UNO有将这几个接脚接到ICSP及接脚11、12、13,这与Leonardo不同之处,所以要与ENC28J60接只能从ICSP下手。

ICSP

Arduino都会有个ICSP的接脚,它可以将Arduino变成一个烧录器来烧录另一个Arduino,它在烧录时也会用到SPI的接脚,所以都会将SPI的接脚引出,接下来Leonardo利用这方式将ENC28J60连接,以下为Leonardo的ICSP接脚配置:

接脚 名称
1 MISO
2 VDD
3 SCK
4 MOSI
5 RESET
6 GND

另外从网路上找到这张图更容易理解:

资料来源:http://www.bq.com/

完成连接ENC28J60

如此一来与ENC28J60照著名称与ICSP接脚名称对接来完成SPI的接线,剩下还有个SS(CS)接脚,这接脚在Leonardo是没有定义的,所以就照着先前表格提供的接脚10接上:

资料来源Arduino Forum

在使用相关的Library时要记得指定SS的接脚就能完成,下面以EtherCard的例子来指定SS(CS)接脚为10:

//-----------start-----------
void setup () {
  Serial.begin(9600);
  Serial.println(F("Start!"));
  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  ether.staticSetup(myip,mygw,mydns);
}
//------------end------------

范例在setup()中会提供一个将ENC28J60初始化动作ether.begin,将原本的命令改成

  if (ether.begin(sizeof Ethernet::buffer, mymac,SS(CS)接脚) == 0)

SS接脚请输入你SS(CS)接脚的号码,这里是接脚10,所以程式会修改成:

//-----------start-----------
void setup () {
  Serial.begin(9600);
  Serial.println(F("Start!"));
  if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  ether.staticSetup(myip,mygw,mydns);
}
//------------end------------

注:表格中是以CS(Chip Select)接脚称之,但因Uno的CS使用接脚10,在内部定义称做SS,然而EtherCard也使用SS名称来操作,但其实是以CS名称为主,如果您的Arduino版本有SS接脚就直接接上SS接脚。

结语

以上为Leonardo与ENC28J60的连接方式,它最主要是要完成SPI的接脚连接,整个说明过程提供一个从电路图中寻找到答案的方法,如果这方式觉的不容易理解的话,那也可以参考一下官方在SPI library文中有提供一个表格提供各个版本的接脚位置,如下图:

表格中也明确提到Leonardo将SPI的接脚规画在ICSP的接脚名称之中,并没有像其他版本有共用接脚的情形。

参考资料