Как я могу увеличить скорость передачи данных W5500 при подключении к ESP32 в Arduino? - PullRequest
0 голосов
/ 09 мая 2019

Я столкнулся с проблемой при попытке отобразить веб-страницу через Ethernet в настройке, которая объединяет ESP32 с чипом W5500.

Подключение довольно простое и прямолинейное (ESP32 SPI подключается напрямую к W5500 SPI, общему GND и питается от 3,3 В), и, очевидно, работает, поскольку как WiFi, так и Ethernet назначаются IP-адреса, и я могу пинговать их оба успешно.

На самом деле я уже давно пользуюсь этой настройкой, но только когда я начал пытаться отобразить несколько здоровенную веб-страницу, я начал замечать некоторые проблемы.

По сути, все ресурсы веб-страниц хранятся в SPIFFS. И, как и следовало ожидать, когда клиент (браузер) отправляет GET-запросы для получения определенного скрипта или страницы, приведенный ниже код обрабатывает его. Я использую Arduino:

void serve_file(Client *client, char* file_name, char* content_type) {

    File webFile;
    webFile = SPIFFS.open("/" + String(file_name));

    Serial.println("Now sending: " + String(file_name));

    client->println("HTTP/1.1 200 OK");
    client->println("Content-Length: " + String(webFile.size()));
    client->println("Content-Type: " + String(content_type));
    client->println("Connection: close");
    client->println();

    if (webFile) {
        while (webFile.available()) {
            int num_bytes_read;
            unsigned char byte_buffer[1024];
            num_bytes_read = webFile.read(byte_buffer, 1024);
            client->write(byte_buffer, num_bytes_read);
        }
        webFile.close();
    }

}

Теперь у меня не было проблем с отображением основных веб-страниц с использованием этого кода. Недавно я попытался отобразить веб-страницу с некоторыми диаграммами и определенным красочным дизайном, который не требовал огромных дополнительных ресурсов, всего лишь несколько библиотек .css и .js объемом ~ 500 КБ. Удивительно, но загрузка веб-страницы через Ethernet была ужасно медленной, всего ~ 2,5 с.

Чтобы убедиться, что это был не мой код, я попытался отобразить ту же веб-страницу, используя тот же код, но через Wi-Fi, и это было намного быстрее (0,8 - 1,2 с), что является скоростью, ожидаемой через Wi-Fi.

Кроме того, я заметил, что при загрузке веб-страницы через Ethernet некоторые ресурсы часто не загружались должным образом, вызывая сбой страницы:

enter image description here

Чтобы еще раз убедиться, что это не связано с ошибкой в ​​моем коде, я попытался отобразить веб-страницу через WiFi и обновить ее 100 раз. Ни разу страница не вылетала или ресурс не загружался.

Именно здесь я начал подозревать, что это может быть связано с некоторыми проблемами со скоростью соединения SPI или синхронизацией между ESP32 и W5500. Поскольку я не эксперт в области аппаратного обеспечения, все, что я мог сделать, это немного поиграть с тактовой частотой SPI из кода, который не имел значения, за исключением случаев, когда я сильно уменьшал его (загрузка веб-страницы потребовалась бы целую вечность).

Может кто-нибудь помочь с этим? Я работаю над проектом, и я не хочу, чтобы это решило меня навсегда.

...