我设计了一个基于 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 服务器的请求可以正常工作并显示在日志中。