gpt4 book ai didi

c++ - ENC28J60 (EtherCard) 和 SD 卡 (SdFat) 同时在 Arduino Mega 上

转载 作者:行者123 更新时间:2023-11-28 07:36:25 26 4
gpt4 key购买 nike

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

现在我更改了硬件设计以使用 ENC28J60 Ethernet board来自 ElecFreaks 和 ElecFreaks SD card breakout board .做出这个决定是为了更好地设计一个可以安装到电气柜中的 DIN 导轨的外壳。我一直使用 SdFat,但我不得不使用 EtherCard 库与 ENC28J60 通信。

我将 mega 的引脚 13 和引脚 14 用于我的芯片选择线,并将两 block 板连接到 SPI公共(public)汽车。使用库中的示例文件,这两 block 板都可以完美地工作。我从 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 服务器的请求有效并显示在日志中。

最佳答案

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

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

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

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

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

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

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

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

关于c++ - ENC28J60 (EtherCard) 和 SD 卡 (SdFat) 同时在 Arduino Mega 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16697115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com