Пожалуйста, найдите ошибку - передача файла из FTP

Акронис
Пн 31 июля 2017 г. 5:43 утра
взял пример отсюда: http: // Playground.Ардуино.cc/code/ftp

Передача файла на FTP -сервер отличный.


// #define ftpwrite

Но когда мне нужно прочитать с FTP -сервера и записать на SD -карту, файл создается на SD -карте с длиной 0, а программа висит или петли.
Не могу найти в чем проблема.

Файл открыт для чтения через FTP, а затем FTP дает ошибку "Связанный с подключением" put "

Нужна помощь


Поймите, что никогда не выходит из этой подпрограммы:
....... dclient.stop(); Serial.println(F("Data disconnected")); serial.print("here goes"); if(!eRcv()) return 0; //comes in here ever comes back serial.print("here misses"); ......

Стивестронг
Пн 31 июля 2017 г. 8:30 утра
Вы не должны включать "Ethernet_stm.час"вместо" Ethernet.час" ?

Вы подключаете как SD -карта, так и модуль Ethernet к одному и тому же порту SPI1?
Проверьте PIN -код Ethernet Select.
В качестве альтернативы используйте отдельные порты SPI.

Акронис
Пн 31 июля 2017 г. 8:42 утра
Привет, Стивестронг .

Я использую вашу последнюю библиотеку версий https: // github.com/stevstrong/ethernet_stm32
+ https: // github.com/stevstrong/arduino_stm32
+ SDIO ViewTopic.PHP?F = 39&t = 2215
+ https: // github.com/stevstrong/adafruit_ ... 6bit_stm32

Плата STM32F407VET6 Black + W5500 (SPI1) + TFT



#включать <Adafruit_tftlcd_16bit_stm32.час>
#include "sdiof4.час"
#включать <Ethernet_stm32.час>
Spiclass mspi (1);


byte mac [] = {0x90, 0xa2, 0xda, 0x00, 0x59, 0x99};
IPaddress IP (10, 22, 5, 199);
IPaddress Gateway (10,22, 1, 1);
Подсеть iPaddress (255, 255, 0, 0);
IPaddress Server (10,22, 5, 4);
EthernetClient Client;
EthernetClient dClient;




Ethernet.init (MSPI, PA4);
Ethernet.начинать (Mac, ip, шлюз, шлюз, подсеть);

Стивестронг
Пн 31 июля 2017 г. 8:44
Тогда вы должны использовать: #include #include

Акронис
Пн 31 июля 2017 г. 8:47 утра
Я сделал все, как написано в этой теме ViewTopic.PHP?F = 39&t = 2215

Стивестронг
Пн 31 июля 2017 г. 8:48
Вы тестировали отдельно SDIO и Ethernet?

Акронис
Пн 31 июля 2017 г. 8:53 утра
Нет - не тестируется.
Как проверить получение файла с FTP -сервера без записи на SD -карту ?

Акронис
Пн 31 июля 2017 г. 9:07
проверил еще раз - программа останавливает или зацикливает ее на


Dclient.останавливаться();
если(!ercv ()) return 0; // <<<<<<<<< эта рутина

и

клиент.println (f ("quit"));
если(!ercv ()) return 0; // <<<<<<<<<<<<< эта рутина
byte eRcv() { byte respCode; byte thisByte; while(!client.available()) delay(1); respCode = client.peek(); outCount = 0; while(client.available()) { thisByte = client.read(); Serial.write(thisByte); if(outCount < 127) { outBuf[outCount] = thisByte; outCount++; outBuf[outCount] = 0; } } if(respCode >= '4') { efail(); return 0; } return 1; }

Стивестронг
Пн 31 июля 2017 г. 9:24
[Акронис - Пн 31 июля 2017 г. 8:53] - Нет - не тестируется.
Как проверить получение файла с FTP -сервера без записи на SD -карту ?
Вы должны проверить отдельно.
Вы можете просто распечатать сериал полученных байтов.
Я не знаю, что делает ercv (), но если он работает без того.
Проверьте предупреждающие сообщения в Arduino IDE.

victor_pv
Пн 31 июля 2017 г. 12:56
Проверьте это значение на этой рутине:
respCode = client.peek();

Стивестронг
Пн 31 июля 2017 г. 13:10
клиент.peek () возвращает байт, поэтому я не вижу здесь никакой проблемы, что не означает, что это не может быть что -то не так с этой функцией.

victor_pv
Пн 31 июля 2017 г. 16:02
[Стивестронг - Пн 31 июля 2017 г. 13:10] - клиент.peek () возвращает байт, поэтому я не вижу здесь никакой проблемы, что не означает, что это не может быть что -то не так с этой функцией.
Да, я имею в виду, что не является недействительным тип возврата, а скорее заглядывая, возвращая значение выше 4, когда он не ожидается, либо из -за ошибки, либо из -за некоторой коррупции в общении.