在Arduino Mega上同时使用ENC28J60(EtherCard)和SD卡(SdFat)

时间:2013-05-22 16:33:24

标签: c++ arduino sd-card ethernet

我设计了一款基于Arduino Mega的主板,它使用WizNET以太网shield和附带的SD卡读卡器。使用标准以太网库和SdFat工作正常。

现在我已将硬件设计更改为使用ElecFreaks中的ENC28J60 Ethernet boardElecFreaks SD card breakout board。为了更好地设计一个可安装在电柜中的DIN导轨上的外壳,我们做出了决定。我和SdFat呆在一起,但我不得不使用EtherCard库与ENC28J60对话。

我已经使用了mega的Pin 13和Pin 14作为芯片选择线,并将两块板连接到SPI总线。两个板单独使用库中的示例文件完美地工作。我从SD卡上的文件中读取配置,并使用文件中的值设置以太网。到现在为止还挺好。正确访问SD卡,以太网板响应ping请求。现在的问题是我似乎无法通过以太网板发出TCP请求。

如何让这两块板一起工作?

这里有一些代码可以解决这个问题,但事实并非如此。

//Initial request
char request_uri[] = "/foo/bar/";
Stash::prepare(PSTR("GET $F HTTP/1.1" "\r\n"
    "User-Agent: arduino/1.5.2" "\r\n"
    "\r\n"),
  request_uri);

ether.copyIp(ether.hisip, target_ip);
ether_sessionID = ether.tcpSend();
request_timer = millis() + REQUEST_TIMEOUT;

//And in the loop
ether.packetLoop(ether.packetReceive());

//Function called after initial request in loop (different state)
void checkTcpResponse() {
    const char* reply = ether.tcpReply(ether_sessionID);

    if (reply != 0) {
        Serial.println(reply);
    }
    else {
        if (millis() > request_timer) {
            Serial.println("Timeout reached");
            state = STATE_RESET;
            delay(1000);
        }
    }
}

//This is just cut from the code, so it is not complete, etc.

在执行请求时,我正在观看连接的Web服务器的access.log。没有任何反应:(如前所述,使用EtherCard库的WebClient示例,对给定Web服务器的请求将起作用并显示在日志中。

1 个答案:

答案 0 :(得分:1)

我知道你一年前问了这个问题,但似乎没有人给你任何帮助。

我在使用enc28j60以太网卡和SD卡时遇到了类似的问题。两者都是单独工作但不是一起工作。

我解决了这个问题,但使用单独的电源给我3.3伏特。

我使用了其中一种面包板电源,它们同时提供3.3& 5伏。

当我通过面包板连接时,我仍然遇到了一些问题。

我认为面包板连接有点狡猾,所以我通过直接从额外的电源引脚获取电源来解决这个问题。

有足够的电力为5 V时提供实时时钟和LCD显示器。

您现在可能已经解决了问题,但其他人可能会觉得这很有用。