我设计了一款基于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服务器的请求将起作用并显示在日志中。
答案 0 :(得分:1)
我知道你一年前问了这个问题,但似乎没有人给你任何帮助。
我在使用enc28j60以太网卡和SD卡时遇到了类似的问题。两者都是单独工作但不是一起工作。
我解决了这个问题,但使用单独的电源给我3.3伏特。
我使用了其中一种面包板电源,它们同时提供3.3& 5伏。
当我通过面包板连接时,我仍然遇到了一些问题。
我认为面包板连接有点狡猾,所以我通过直接从额外的电源引脚获取电源来解决这个问题。
有足够的电力为5 V时提供实时时钟和LCD显示器。
您现在可能已经解决了问题,但其他人可能会觉得这很有用。