0

我设计了一个基于 Arduino Mega 的开发板,它使用 WizNET 以太网扩展和随附的 SD 读卡器。使用标准以太网库和 SdFat 可以正常工作。

现在我改变了我的硬件设计以使用 ElecFreaks 的ENC28J60 以太网板ElecFreaks SD 卡分线板。该决定是为了更好地设计一个可以安装到电柜中的 DIN 导轨上的外壳。我一直使用 SdFat,但我不得不使用 EtherCard 库与 ENC28J60 对话。

我已将兆的引脚 13 和引脚 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 服务器的请求可以正常工作并显示在日志中。

4

1 回答 1

1

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

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

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

我使用了其中一个提供 3.3 和 5 伏电压的面包板电源。

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

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

有足够的电力供应实时时钟和 LCD 显示器以及 5 伏电压。

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

于 2014-05-06T22:41:08.810 回答