Синяя таблетка и SD -карта

Скематик
Вторник 23 мая 2017 г. 22:47
Я пытался получить синюю таблетку с модулем SD -карты. Модуль SD работает с Arduino, однако ни одна из библиотек, с которыми я знаком, не работает с STM32F103.
Мои соединения (модуль SD -> синяя таблетка)
CS -> PA15
SCK -> PB3
Мисо-> PB4
Моси -> PB5
Гнездо->Гнездо
VCC подключен к внешнему 5V


SD Библиотека Cardinfo: /* SD card test This example shows how use the utility libraries on which the' SD library is based in order to get info about your SD card. Very useful for testing a card when you're not sure whether its working or not. The circuit: * SD card attached to SPI bus as follows: ** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila ** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila ** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila ** CS - depends on your SD card shield or module. Pin 4 used here for consistency with other Arduino examples created 28 Mar 2011 by Limor Fried modified 9 Apr 2012 by Tom Igoe */ // include the SD library: #include #include // set up variables using the SD utility library functions: Sd2Card card; SdVolume volume; SdFile root; // change this to match your SD shield or module; // Arduino Ethernet shield: pin 4 // Adafruit SD shields and modules: pin 10 // Sparkfun SD shield: pin 8 const int chipSelect = PA15; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } Serial.print("\nInitializing SD card..."); // we'll use the initialization code from the utility libraries // since we're just testing if the card is working! if (!card.init(SPI_HALF_SPEED, chipSelect)) { Serial.println("initialization failed. Things to check:"); Serial.println("* is a card inserted?"); Serial.println("* is your wiring correct?"); Serial.println("* did you change the chipSelect pin to match your shield or module?"); return; } else { Serial.println("Wiring is correct and a card is present."); } // print the type of card Serial.print("\nCard type: "); switch (card.type()) { case SD_CARD_TYPE_SD1: Serial.println("SD1"); break; case SD_CARD_TYPE_SD2: Serial.println("SD2"); break; case SD_CARD_TYPE_SDHC: Serial.println("SDHC"); break; default: Serial.println("Unknown"); } // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32 if (!volume.init(card)) { Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card"); return; } // print the type and size of the first FAT-type volume uint32_t volumesize; Serial.print("\nVolume type is FAT"); Serial.println(volume.fatType(), DEC); Serial.println(); volumesize = volume.blocksPerCluster(); // clusters are collections of blocks volumesize *= volume.clusterCount(); // we'll have a lot of clusters volumesize *= 512; // SD card blocks are always 512 bytes Serial.print("Volume size (bytes): "); Serial.println(volumesize); Serial.print("Volume size (Kbytes): "); volumesize /= 1024; Serial.println(volumesize); Serial.print("Volume size (Mbytes): "); volumesize /= 1024; Serial.println(volumesize); Serial.println("\nFiles found on the card (name, date and size in bytes): "); root.openRoot(volume); // list all files in the card with date and size root.ls(LS_R | LS_DATE | LS_SIZE); } void loop(void) { }

Rogerclark
Ср 24 мая 2017 г., 4:23
Похоже, у него есть преобразователь уровня для работы с оборудованием AVR 5V.

Это может не работать с 3.3V аппаратное обеспечение STM32, так как преобразователь уровня не требуется (и, скорее всего, приведет к отправке неправильных уровней напряжения на SD -карту)

AG123
Ср 24 мая 2017 г. 9:41
Получить их без преобразователя уровня и без серийных резисторов, подтягивания, соответствующие спецификациям SD, в порядке, но серии резисторов, вероятно, усугубляют ситуацию, образуя цепь RC, искажая сигналы в диапазонах MHZ
http: // www.eBay.com/sch/i.HTML?_from = r4 ... Duino+3.3В

Скематик
Ср 24 мая 2017 г. 9:54
Я закажу один с 3.3V логическое напряжение.

В то же время я хочу начать экспериментировать с SD. Я пытался использовать преобразователь логического уровня для линий SPI между модулем STM32F103 и SD, однако результаты также разочаровывают (возможно, преобразователь уровня слишком медленный?). Нет ли способ начать работу с модулем SD, который у меня сейчас?

Изображение

AG123
Ср 24 мая 2017 г., 10:06
Я думаю, что SD -карты суетливы с уровнями напряжения, в частности, VCC и напряжения питания земли, 3.3 В после того, как выброшенный LDO, возможно, оставлен около 2.2V, затем * Серия * Резисторы, вероятно, искажают сигналы в диапазонах MHZ, подтягивание, встречая спецификации SD, в порядке.
То, что можно попытаться сделать, - это начало с низкой скорости тактовой частоты SPI

кажется, эти 3.3V TF Micro-SD-адаптеры меньше этих серийных резисторов «трудно найти» на eBay, многие из них помещают серионные резисторы или некоторых переводчиков ровного уровня, и они сдерживали это 3.3 В/5 В. Но я думаю, что это влияет на производительность 3.3v, как только вы поднимаете часы SPI до диапазонов MHZ, но именно здесь мы хотим работать, иначе вы можете в конечном итоге получить скорость передачи, скажем, в низких сотнях Kbytes/S <100 кбайт/с в лучшем случае

Что я сделал, так это удалил резисторы из 3 серии (заменен проводами) на моем ЖК -дисплее ILI9341 с адаптером SD и использовал этот адаптер
http: // www.STM32duino.com/viewtopic.PHP?F = 44&T = 2026

Обратите внимание, что ваш адаптер, кажется, использует буфер/приемопередачу, я думаю, что буферные ICS все еще должны работать для линий данных.
Но если вы хотите питать карту, вы можете попытаться найти источник напряжения 5 В, если вы хотите подключиться перед LDO
Если вы обходитесь с 3.3V по всему LDO, выброс, вероятно, будет не менее 0.5 В (оставив 2.7 В) или в некоторых случаях 1 В (оставив 2.2 В)

Но будьте осторожны с тем, чтобы поставить VCC 5 В, так как это может повредить чип STM32F1 и или или SD, если это сделано неправильно, SPI 1 на STM32F103 находится на аналоговых контактах, что не является толерантным 5 В

Rogerclark
Ср 24 мая 2017 г. 10:32
Похоже, что чип преобразователя уровня просто берет MOSI и SCLK и преобразует их в 3.3V, трудно понять, делает ли он мисо, глядя на фотографии

Вы могли бы попробовать выпадать в распад преобразователь уровня и тщательно паять входы на выходы для MOSI и SCLK.

Но, как сказал @AG123, могут также возникнуть проблемы с регулятором, поэтому убедитесь, что вы предоставите его 5V или альтернативно подключите 3.3v на выход регулятора напряжения.
Возможно, вам также потребуется удалить и в регуляторе напряжения, но, по моему опыту, те, которые я использовал, не втягивают ток через свой выход, если они поставляются с 3.3В

Стивестронг
Ср 24 мая 2017 г. 13:12
Как сказал @AG123, снимите скорость SPI при использовании переводчика уровня.

Скематик
Ср 24 мая 2017 г., 22:47
Спасибо за все отзывы.

Кажется, что, по крайней мере, некоторые модификации требуются для моего текущего модуля SD, однако, если возможно, я бы хотел отклониться от SMD -пайки :) Будут ли некоторые контакты за заголовком, припаянные непосредственно к булавкам адаптера MicroSD-SD? Я посмотрел вверх булавки от SD -карты, Похоже, есть линии SPI и 3.3v толерантный. Я пошел вперед и припаяли несколько булавок к адаптеру MicroSD.(не моя картина, но выглядит очень похожим) Я отложил модуль SD в сторону и подключил SD -карту непосредственно к плате микроконтроллера.

Общение с 3.3V Arduino Pro Mini работает нормально! Обе библиотеки выводят правильную информацию о вставленной SD -карте и перечисляют все файлы на карте хранения.
На STM32F103 он, по крайней мере, распознает SD -карту, однако она все еще сталкивается с проблемами (правильный размер карты 8 ГБ);

SD библиотека Cardinfo.серийный вывод INO (код в открытии сообщения): ializing SD card...Wiring is correct and a card is present. Card type: SD2 Could not find FAT16/FAT32 partition. Make sure you've formatted the card

Стивестронг
Ср 24 мая 2017 г. 11:19
Скематик написал:Я хочу попытаться снизить скорость SPI, где я могу это сделать?

Скематик
Ср 24 мая 2017 г. 11:36
Стивестронг написал:Скематик написал:Я хочу попытаться снизить скорость SPI, где я могу это сделать?

Стивестронг
Чт 25 мая 2017 г., 6:36
Вы проверили 3.3V снабжение? На синей таблетках 5V->3.Регулятор напряжения 3V не очень сильный.
Кажется, что данные чтения в основном 0x00, так что там все еще должно что -то не так.

Скематик
Чт 25 мая 2017 г. 9:23
Стивестронг написал:Вы проверили 3.3V снабжение? На синей таблетках 5V->3.Регулятор напряжения 3V не очень сильный.
Кажется, что данные чтения в основном 0x00, так что там все еще должно что -то не так.

Скематик
Пт 26 мая 2017 г. 14:13
Все, что я мог попробовать?

Пито
Пт 26 мая 2017 г. 16:50
Какой у вас булавка Chipselect?? Попробуйте использовать другой.
Также попробуйте обменять булавки MOSI/MISO..

AG123
Пт 26 мая 2017 г., 18:32
Поскольку у вас есть регулятор LDO на плате SD Breakout
Изображение
Вы можете попытаться направить штифт 5 В от вашего чертежа на штифт VCC на плате SD Breakout
*Предупреждение*, когда все это сделает, есть под рукой вольтметра. После подключения 5 В VCC My Shought - это сначала измерение напряжений от MSOI, MOSI, SCK, CS -штифтов на прорыве, прежде чем даже соединить его с Bluepill, поскольку SPI 1 не является толерантным 5 В
Вам, вероятно, нужно измерить напряжения на синих таблетках E.глин. штифт 5 В, который, казалось, был вывод 3, чтобы установить, что это правильный штифт
Схема находится на форуме STM32Duino Wiki
http: // wiki.STM32duino.com/index.PHP?title = blue_pill

AG123
Пт 26 мая 2017 г., 19:25
Вы используете SD Fat 'Greiman'? В настоящее время это кажется тем, что работает довольно хорошо
http: // www.STM32duino.com/viewtopic.PHP?f = 13&t = 20
https: // github.com/greiman/sdfat

Кроме того, я на самом деле использовал SPI.CPP, SPI.H 'драйверы' в библиотеках/SPI
https: // github.com/rogerclarkmelbourne/ ... Спутники/SPI

Вы могли бы использовать библиотеки SD Fat, с которыми вы знакомы, но я думаю, вам нужно будет проверить, где они подключены к SPI.час.
я люблю копировать SPI.С, SPI.H из библиотек/SPI и поместите это в ту же папку, что и набросок, и обновить коды, чтобы включить «SPI.h ", а не <SPI.час>. Похоже, в ядро ​​Libmaple есть некоторые коды, касающиеся SPI. Я скопировал файлы и поместил их в ту же папку, чтобы избежать, включая неверные библиотеки из ядра Libmaple

Эти булавки тоже выглядят немного странно для меня CS -> PA15
SCK -> PB3
Мисо-> PB4
Моси -> PB5
Гнездо->Гнездо
SPI1 обычно на PA4 - SS (you could use this as /CS if you'd like) PA5 - SCK1 PA6 - MISO1 PA7 - MOSI1

Sweetlilmre
Солнце 16 июля 2017 г. 16:40
[AG123 - Пт 26 мая 2017 г., 19:25] - SPI1 обычно на PA4 - SS (you could use this as /CS if you'd like) PA5 - SCK1 PA6 - MISO1 PA7 - MOSI1

Tfried
Сб 30 декабря 2017 г., 8:21 вечера
Не для возрождения мертвого потока, а для тех, кто ищет ту же проблему:

Я столкнулся с такими же проблемами, и в моем случае проблема заключалась в том, что читатель SD -карт не работал в 3.3V (хотя спецификации сказали об этом). Как только я включил его с 5V, вместо этого он начал работать просто отлично (используя библиотеку «по умолчанию» Arduino SD) тоже).

Обратите внимание, что при питании с помощью 5V вы захотите, чтобы они либо использовали преобразователь логического уровня, либо подключиться к SPI2 (PINS PB12-PB15, которые обозначены как толерантные 5 В). Использовать SPI.setModule(2);

Rogerclark
Сб 30 декабря 2017 г., 8:31 вечера
Обратите внимание, что максимальная скорость на SPI2 - это половина SPI1

Но, возможно, это достаточно быстро для SD

Mrburnette
Солнце 31 декабря 2017 г., 17:05
[Tfried - Сб 30 декабря 2017 г. 8:21 вечера] - Не для возрождения мертвого потока, а для тех, кто ищет ту же проблему:

Я столкнулся с такими же проблемами, и В моем случае проблема заключалась в том, что читатель SD -карты не работал в 3.3В (Хотя спецификации сказали об этом). Как только я включил его с 5V, вместо этого он начал работать просто отлично (используя библиотеку «по умолчанию» Arduino SD) тоже).
...
Мне еще предстоит найти читатель SD -карты, который не 3.3В ... Я получил карты, у которых есть 3.3 Вольт регулятор для входа 5 В в VCC. В этом случае один только шорт с регулятором. Часто карты 5V имеют резисторы последовательно с сигнальными линиями, чтобы обеспечить квазиолтаж разделитель ... бедный. Эти резисторы могут быть удалены и установлены 0-ом SMD-блоки или просто перемычки для проводов. Единственный штифт, на который вы можете оставить резистор,-это переключатель вставки SD-карты.

Производительность на картах 5V чуть лучше, чем паршивая. .. Вставленное сопротивление вызывает проблемы с временем с непрерывной емкостью и индуктивностью.

Луча

Chpr
Чт 22 марта 2018 г. 15:24
У меня 3.3 V µSD чтения карты нравится Вот этот (Без какого -либо регулятора, просто ограниченные резисторы), и я попытался заставить его работать с кодом, приведенным на начале этого поста. У меня такие же проблемы, мой карт Connecter или на 3.3 В или 5 В.

Я достиг, чтобы заставить его работать с решением использования «SPI.SetModule (2); «Это даже работает с" spi_full_speed "

Искренне.

Пьер

Пито
Чт 22 марта 2018 г., 20:02
У меня 3.3 V µSD Reader Card, как этот (без какого -либо регулятора, только ограниченные резисторы) Эти 10 тысяч на доске (103)-это подтягивания, а не «ограниченные резисторы».. Использовать с 3.Только 3v !!

Chpr
Пт 23 марта 2018 г. 9:38 утра
[Пито - Чт 22 марта 2018 г. 20:02] - У меня 3.3 V µSD Reader Card, как этот (без какого -либо регулятора, только ограниченные резисторы) Эти 10 тысяч на доске (103)-это подтягивания, а не «ограниченные резисторы».. Использовать с 3.Только 3v !!
Вы жестко.

Не намеренно, я связал эту SD -карту с 5 В ... Всегда жив !

Искренне.

Пьер