Когда-то давно - стояла задача подключить вот такой модуль к дуне, чтобы читать не с SD-карты, а с полноценной флешки: Помыкавшись, помумукавшись, почитав китайский даташит на это дело (которому слепо следовать нельзя, потому что практика показала, что временнЫе задержки, там фиругирующие - ни разу на практике не работают), выискав точку отсчёта в виде кода экспериментов одного забугорного товарища - родилось вот это: https://github.com/Porokhnya/CH376STest Код является, во-первых, быстрым наброском. Далее - он блокирующий, чтение из файла - блочное, ну а поскольку эта китайская хрень почему-то иногда выдаёт не точно запрошенное кол-во байт - реализована дочитка. Всё это дело, в целом - сыровато хотя бы по части архитектуры, но уже позволяет через тот же SoftwareSerial на скорости 9600 ткнуть к Arduino флешку и почитать/пописать файлы на неё. Приведённый пример скетча - для Arduino Mega, флешка цепляется на Serial1, для простоты понимания. Но, поскольку код работает с любым потомком Stream - то конструктору класса скормить можно и экземпляр SoftwareSerial. Никаких далеко идущих претензий, дальнейшего развития, прочего - выкладываю как есть, возможно, будет полезно для старта кому-то. В идеале, да для взрослого проекта - надо переписывать всё на асинхронщину, чтобы без этих ваших delay и подобных неприятных вещей. Архитектура - наколенная, тупо не задумывался особо, так что as is. Для простеньких проектов - можно причеплять, и читать с флешки (что я, собственно, с успехом и делал). Для очень сурьёзных - нужен асинхронный подход, как по мне. Ну и - пример с гита: Код (C++): //-------------------------------------------------------------------------------------------------------------------------------- #include "CH376S.h" CH376S_UART USBDisk(Serial1); //-------------------------------------------------------------------------------------------------------------------------------- void setup() { Serial.begin(9600); Serial1.begin(9600); if(USBDisk.begin()) { String fileName = "TEST.TXT"; // имя файла на флешке if(USBDisk.isFlashDriveInserted()) // если флешка вставлена { USBFile f = USBDisk.open(fileName); if(f.isOpen()) { Serial.print(F("File size: ")); Serial.println(f.size()); Serial.println(F("Content of \"TEST.TXT\": ")); while(f.available()) { char ch = (char) f.read(); if(ch == 0) { break; } Serial.print(ch); } f.close(); } } } } //-------------------------------------------------------------------------------------------------------------------------------- void loop() { } //-------------------------------------------------------------------------------------------------------------------------------- Может, кому и будет полезно. Если нет - ну значит нет, от меня не убудет, лавровых венков не жду, просто вспомнилось, сколько эта фигня мне крови попила, и захотелось поделиться.
Тыкал те, что были в наличии - читаются. Если интересует более подробно - инфа есть в даташите на микруху.