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的接腳名稱之中,並沒有像其他版本有共用接腳的情形。

參考資料