【发布时间】:2013-05-22 16:33:24
【问题描述】:
我设计了一个基于 Arduino Mega 的开发板,它使用 WizNET 以太网 shield 和随附的 SD 读卡器。使用标准以太网库和 SdFat 可以正常工作。
现在我已更改我的硬件设计以使用来自 ElecFreaks 的 ENC28J60 Ethernet board 和 ElecFreaks 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 服务器的请求可以正常工作并显示在日志中。
【问题讨论】:
-
顺便说一句,这是基于 Ethercard 库中的 NoIPClient 示例...
标签: c++ arduino sd-card ethernet