Модуль CH376S - USB флешка к ардуино мега

Помогите пожалуйста разобраться в распиновке.


*перемычка если что снята

Подключал через эту библиотеку:
библиотека

В библиотеке нету схемы, есть общая документация по микросхеме CH376S.
На первой станице есть ссылка на ещё одну библиотеку (ссылка) на первой страницы есть вот такие строки:

P_S → S

S → Rx GND Tx

5V

Ну и я решил все подключить вот так:

Ничего не происходило, индикаторы на модуле не мигали.
В мониторе получал вот это:

-------------------- INIT CH376 ---------------------

The CH376S module has been reset !

Checking USB disk connection status

TimeOut waiting for response: Error while: Connecting to USB disk

Mounting USB disk

TimeOut waiting for response: Error while: Connecting to USB disk

---------------- END OF INTIALIZATION ----------------

Может кто работал с этим модулем, буду благодарен если поможете.

А что в гугле-то не поискать? Второй или третьей ссылкой нашел вот это:

из чего следует, что перемычку снимать не надо:

ее надо переставить ближе к микросхеме (хотя это, скорее всего, одно и то же)

Поменять RX/TX, а для начала просто соединится к компом через какой-нибудь свисток.

Там кстати, написано RS232
Если там реально RS232 - то он вообще-то с ардуиновским Уартом не совместим по уровням…

Добавлено позже:
Судя по статьям в гугле, все подключают этот модуль к Уно напрямую, так что видимо тут простой Уарт, а не 232

Кстати, на нашем форуме уже работали с этим модулем

Афтар пропал куда-то

Важно ли подключать именно к 3-ему последовательному порту (RX and TX)? Я все подключил к 0 и 1 пинам.

GND и VCC вставил в точности как на схеме, индикаторы все равно не загораются

Перемычку вставил ближе к микросхеме

пины 0 и 1 никогда лучше не трогать, они для подключения к УСБ
У вас могут появится проблемы с загрузкой, да и Монитор последовательного порта в Ардуино ИДЕ перестанет работать.

Вообщем, подключил через 3-ий последовательный порт (14 и 15 пины), засверкали индикаторы, но в мониторе та же история.

-------------------- INIT CH376 ---------------------
The CH376S module has been reset !
Checking USB disk connection status
TimeOut waiting for response: Error while: Connecting to USB disk
Mounting USB disk
TimeOut waiting for response: Error while: Connecting to USB disk
---------------- END OF INTIALIZATION  ----------------
------------------ CHECK CONNECTION -------------------
TimeOut waiting for response: Error while: checking connection
------------------ CHECK COMPLETED  -------------------

Схему. И флешка в FAT?

Флешку отформатировал в Fat32, попробовал - все так же.

-------------------- INIT CH376 ---------------------
The CH376S module has been reset !
Checking USB disk connection status
TimeOut waiting for response: Error while: Connecting to USB disk
Mounting USB disk
TimeOut waiting for response: Error while: Connecting to USB disk
---------------- END OF INTIALIZATION  ----------------
------------------ CHECK CONNECTION -------------------
TimeOut waiting for response: Error while: checking connection
------------------ CHECK COMPLETED  -------------------

Мой код:

#include <CH376s.h>

int const TX_pin = 14;
int const RX_pin = 15;
CH376s CH376(15,14);     

void setup() {                              
  Serial.begin(9600);
  CH376.init();    
}

Код пример из библиотеки:


// The serial terminal is used to monitor the commands executions and the reply received from the CH376s IC
// The example shows how to crete,manipulate and delete files and directories
// The example shows also how to log data to a csv file

#include <CH376s.h>

#define Tx  49
#define Rx  51

int const TX_pin = Tx;
int const RX_pin = Rx;

byte computerByte;           //used to store data coming from the computer

String wrData  = "What is the meaning of life?";    
String wrData2 = "The answer is 42.";  
String wrData3 = "\tTime\tTemperature\tPressure\tHumidity"; 

String root   = "root";                          
String path1  = "DIR1";
String path2  = "DIR1/DIR2/DIR3";
String path3  = "DIR1/DIR2/DIR3/DIR4";

String folderName = "DIR3";

String fileName1  = "FILETXT.TXT";
String fileName2  = "FILECSV.CSV";


CH376s CH376(Rx,Tx);                        // define class name
                                                 
//==============================================================================================================================================
void setup() {
  Serial.begin(9600);                       // Setup serial communication with the computer (using a baud rate of 9600 on serial monitor)
  CH376.init();                             // Init the connection with CH376 and check the USB status
}

void loop() {
  if(Serial.available()){
    computerByte = Serial.read();                    
      if(computerByte==49){                         // If number 1 from the serial monitor is received
        CH376.checkConnection();                    // Check for successful connection and communication with the CH376S module.
        }
        if(computerByte==50){                       // If number 2 from the serial monitor is received 
        CH376.writeFile(fileName1,wrData,root);     // Create a file. If file exists,overwrite it.
        }
      if(computerByte==51){                         // If number 3 from the serial monitor is received        
        CH376.appendFile(fileName1,wrData2,path1);  // Create a file inside a dir. If folder exist open it,file exists,append it.
        }
      if(computerByte==52){                         // If number 4 from the serial monitor is received  
        CH376.readFile(fileName1,root);             // Read the file called "FILETXT.TXT" in the main root
        }
       if(computerByte==53){                        // If number 5 from the serial monitor is received        
        CH376.appendFile(fileName1,wrData2,path3);  // Append a file called FILETXT.TXT on path /DIR1/DIR2/DIR3/DIR4 if folder and/or files does not exist it create it.
        }
      if(computerByte==54){                         // If number 6 from the serial monitor is received    
        CH376.readFile(fileName1,path3);            // Read the file called "FILETXT.TXT" on path /DIR1/DIR2/DIR3/DIR4 
        }
      if(computerByte==55){                         // If number 7 from the serial monitor is received 
        CH376.deleteFile(fileName1,root);           // Delete the file called "FILETXT.TXT" inside the main root
        }
       if(computerByte==56){                        // If number 8 from the serial monitor is received 
        CH376.deleteFile(fileName1,path3);          // Delete the file called "FILETXT.TXT" on path /DIR1/DIR2/DIR3/DIR4 
        }  
      if(computerByte==57){                         // If number 9 from the serial monitor is received 
         CH376.deleteDir(folderName,path2);         // Delete the entire directory called DIR3 on path /DIR1/DIR2/DIR3
        }    
      if(computerByte==48){                         // If number 0 from the serial monitor is received
        CH376.writeFile(fileName2,wrData3,root);    // Create a file called FILECSV.CSV and then Write the contents of wrData to this file
        int time =0;                                // CSV file can normally opened with excel using text to coluumns function, splittig the columns by tab
        float temp = 26;
        float press = 1013.25;
        float humidity = 60;
        String wrData4 = ""; 
        String wrData5 = "\t";
        String wrData6 = "\n";
        for ( int i = 0; i < 10; i++ ){             // put some data in the table, time,temp,press and humidity.
          time += i; 
          temp += i;
          press += i;
          humidity += i;
          wrData4 += wrData6;
          wrData4 += wrData5;
          wrData4 += time;
          wrData4 += wrData5;
          wrData4 += temp;
          wrData4 += wrData5;
          wrData4 += press;
          wrData4 += wrData5;
          wrData4 += humidity;
          CH376.appendFile(fileName2,wrData4,root);  // Append data to this file
          wrData4 = "";
          delay(250);
          }
        }          
  }
  CH376.checkUnexpectMsg();                         // Check for unexpected data transmitted by the CH376S module
}

Ответил выше

Я бы начинал с флешки, отформатированной в fat. Правда, она должна быть объемом не более 2 Гб.

andriano а у меня есть тоже срочный вопрос)))
можете подсказать, от файловой системы карты, на арудино зависит скорость чтения файла ? например для чтения фото 30 кб fat будет быстрее чем fat32 ? или мне показалось…

Тут слишком много неопределенностей, чтобы можно было ответить однозначно.
Но по статистике fat должен быть быстрее, т.к. на длину файла будет приходиться меньшее число кластеров, следовательно, меньше процент служебной информации.

извините, у меня еще один вопрос возник))) а если уменьшить объем sd с 4 до 2гб, хотя бы теоретически может дать прирост скорости открытия файлов ? воюю тут за каждый fps… при быстром открытии рисунков на sd карте

Вряд ли.
Думаю, максимальную производительность в файловой системе можно получить при следующих условиях:

  1. Не использовать длинные имена файлов.
  2. Избегать фрагментации файлов.
  3. Ограничиться корневым каталогом.
  4. Ограничиться 16 файлами.

Возможно, оптимума можно добиться, если для всех картинок использовать единственный не фрагментированный файл. Но тут желательно обеспечить, чтобы картинки в файле шли не сплошняком друг за другом, а были выровнены на размер кластера.

Имеется в виду не fat32 а просто fat?

вам порекомендовали для начала да, просто в fat а это мне ответили

а флешка на сколько ? относительно большую он возможно и не сможет открыть… 32 гб а может быть даже 16 для него будет много… если есть лучше использовать на 4гб

если вы переключите перемычку, можете попытаться подключить модуль по spi…

попробуйте этот код, он медленнее инициализирует модуль…

#include <CH376s.h>

// Указываем пины для SoftwareSerial (RX, TX)
// CH376 TX -> Arduino pin 14 (RX)
// CH376 RX -> Arduino pin 15 (TX)
CH376s fileSystem(14, 15); // (RX, TX) Аргументы в этом порядке!

void setup() {
  Serial.begin(9600);
  Serial.println("Waiting for CH376 to power up...");
  delay(2000); // Даем модулю 2 секунды на стабилизацию после включения

  Serial.println("Initializing CH376...");
  
  // Инициализируем модуль с проверкой
  if (fileSystem.init()) {
    Serial.println("CH376S initialized successfully!");
    Serial.println("Trying to mount USB drive...");
    
    // Пытаемся смонтировать флешку
    if (fileSystem.mount()) {
      Serial.println("USB drive mounted successfully!");
      Serial.println("Ready for commands.");
    } else {
      Serial.println("ERROR: Failed to mount USB drive.");
      Serial.println("Check: 1. Power supply 2. USB stick format (FAT32) 3. USB stick size");
    }
  } else {
    Serial.println("ERROR: Failed to initialize CH376S module!");
    Serial.println("Check: 1. Wiring (TX/RX swapped?) 2. Jumper set to UART 3. Power");
  }
}

void loop() {
  // Простой цикл, чтобы видеть сообщения
  delay(1000);
}

и на всякий случай когда будите форматировать заново флешку указывайте размер кластера 4096 байт или стандартный…

если проблема с носителями маленького размера вот такой дешевенький купите
как вариант и используйте sd маленького размера, вроде должно работать

надеюсь банальной причины в том что вы выбрали неправильную скорость чтения нет)))
https://github.com/djuseeq/Ch376msc
и вот вам на всякий случай еще эта ссылка, все теперь совесть не будет мучать за флуд в чужой теме))) ибо каждый раз создавать новую, свою, не вариант!