реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как подключить микроSD к STM32F100
PCBExp
сообщение Jun 7 2015, 07:30
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 578
Регистрация: 23-12-06
Из: Москва
Пользователь №: 23 823



Подкиньте какой-нибудь рефдизайн как подключить микро SD карту на SPI.
Go to the top of the page
 
+Quote Post
Spider
сообщение Jun 7 2015, 07:39
Сообщение #2


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



так же как и обычную
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jun 7 2015, 09:06
Сообщение #3


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(PCBExp @ Jun 7 2015, 10:30) *
... как подключить микро SD карту на SPI.


лично сам сделал тупо - закупил на ебеи демо плату с необходимым для ближайшего будущего в разработках.
Там и схемные решения и софтовые. Тупо компилишь пример - работает, переносишь схемотехнику и расположение радиодеталей и узлов изучаешь.
Далее софт уже под свои нужды компонуешь. И дёшево и сердито.

А так - рекомендую примеры от СТМ-а глянуть. Там усё есть.
Если коротко - либо SPI либо SD юзаешь, в зависимости от задачи и свободных лапок.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 7 2015, 10:07
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Alexey Belyaev @ Jun 7 2015, 10:39) *
так же как и обычную

1 и 8 пины через 10кОм на VDD (каждый), не забыть)
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jun 8 2015, 06:32
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(adnega @ Jun 7 2015, 11:07) *
1 и 8 пины через 10кОм на VDD (каждый), не забыть)

Вообще-то CLK лучше через 10кОм на GND. Дело в том, что CLK работает положительным фронтом. При включении питания, когда порты проца еще, как с попойки, "никакие", резяк на землю подержит сигнал на нуле, пока проц не похмелится и не станет на ноги.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 8 2015, 11:32
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а какая разница что с клоком, если CS не выбранsm.gif? может лучше его правильно притянуть?
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jun 8 2015, 13:12
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(Golikov A. @ Jun 8 2015, 12:32) *
а какая разница что с клоком, если CS не выбранsm.gif? может лучше его правильно притянуть?

Для режима SPI может и все равно, но уж если делать с прицелом на SDIO, следует выработать привычку с CLK с резиком на землю. Это, вообще, не моя выдумка, я видел много схем, где именно так и сделано, а в одной схеме, с которой мне пришлось покопаться, я и вправду обнаружил, что при CLK с резистором на землю она работала лучше. Возможно, это было связано с тем, что рядом стоял SIM900 и сильно шумел. В общем, с тех пор я взял себе за правило подсаживать CLK, причем не 10К, а 2K2, что и другим советую.
Go to the top of the page
 
+Quote Post
mantech
сообщение Jun 8 2015, 14:21
Сообщение #8


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(adnega @ Jun 7 2015, 13:07) *
1 и 8 пины через 10кОм на VDD (каждый), не забыть)


Можно про это подробнее ?. Никогда подобного не делал, железки уже больше 5 лет работают. Карты в режимах стандартный и sdhc.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 8 2015, 15:41
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
причем не 10К, а 2K2, что и другим советую.

2K2 - это 2 последовательно или 2 параллельно?
Go to the top of the page
 
+Quote Post
mantech
сообщение Jun 8 2015, 16:14
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Golikov A. @ Jun 8 2015, 18:41) *
2K2 - это 2 последовательно или 2 параллельно?


Это 2,2 кОм biggrin.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 8 2015, 16:57
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Понятно.
то есть на 2.2К точку пожалели)... я думал над таким вариантом, но отверг, точки то бесплатныеsm.gif
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jun 8 2015, 18:31
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(Golikov A. @ Jun 8 2015, 17:57) *
Понятно.
то есть на 2.2К точку пожалели)... я думал над таким вариантом, но отверг, точки то бесплатныеsm.gif

На вопросах по обозначению типа 2K2 прокалываются чистые программеры, далекие от железа wink.gif. Это как в фильме Тарантино "Inglourious Basterds" ("Бесславные ублюдки") англичанин-шпион прокололся, заказывая три пива, показав три пальца "указательный-средний-безымянный", в то время как немцы используют большой палец в качестве единицы.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 8 2015, 20:31
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Да-да... я понял уже...
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 8 2015, 20:58
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(mantech @ Jun 8 2015, 17:21) *
Можно про это подробнее ?

Например, тут.
Цитата
По поводу подтягивающих резисторов есть некоторая неоднозначность. Поскольку SD карты выпускаются несколькими производителями, на них существует несколько спецификаций. В одних документах четко указана необходимость подтягивающих резисторов (даже для неиспользуемых линий - 8, 9), в других документах этих указаний нет (или я не нашел).

Я перестраховываюсь.

Кста, еще ключик на питание карты посоветую. Из некоторых состояний карту только "power cycle" выводит.
Go to the top of the page
 
+Quote Post
inventor
сообщение Jun 10 2015, 12:32
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



кста, может ктонить ответит!
я сделал 2 варианта чтения/записи по SPI - картой мы заменили микросхему от атмеги (spi eeprom)
первый вариант с библиотекой от STM
второй вариант с библиотекой от opencm3

вот что мне непонятно -
1) код с библиотекой STM в два раза компактнее!
2) код от STM работает всегда, а opencm3 иногда начинает глючить

вполне возможно я сделал неправилбно инициализацию SPI
помогите разобраться!

CODE
/**
* @brief Initializes the SPI and CS pins.
* @param None
* @retval None
*/
void spi_init(void)
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;

/* Enable GPIO clock */
RCC_APB2PeriphClockCmd(SD_SPI_SCK_GPIO_CLK | SD_SPI_CS_GPIO_CLK | RCC_APB2Periph_AFIO, ENABLE);

/* Enable SPI clock */
RCC_APB1PeriphClockCmd(SD_SPI_CLK, ENABLE);

/* Configure SPI pins: SCK and MOSI */
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);

// MOSI
GPIO_InitStructure.GPIO_Pin = SD_SPI_MOSI_PIN;
GPIO_Init(SD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);

// MISO
GPIO_InitStructure.GPIO_Pin = SD_SPI_MISO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(SD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);

/* CS */
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = SD_SPI_CS_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(SD_SPI_CS_GPIO_PORT, &GPIO_InitStructure);

SD_CS_HIGH();

/* SPI Config */
SPI_StructInit(&SPI_InitStructure);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;

SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SD_SPI, &SPI_InitStructure);
SPI_CalculateCRC(SD_SPI, DISABLE);
SPI_NSSInternalSoftwareConfig(SD_SPI, SPI_NSSInternalSoft_Set);

/* SPI enable */
SPI_Cmd(SD_SPI, ENABLE);
}


void spi_set_full_speed(void)
{
uint32_t tmp = SD_SPI->CR1;
tmp = (tmp & ~SPI_BaudRatePrescaler_64) | SPI_BaudRatePrescaler_2;
SD_SPI->CR1 = tmp;
}



и код opencm3

CODE
/**
* @brief Initializes the SD_SPI and CS pins.
* @param None
* @retval None
*/
void spi_init(void)
{
rcc_periph_clock_enable(RCC_GPIOB);
rcc_periph_clock_enable(RCC_GPIOA);
rcc_periph_clock_enable(RCC_AFIO);
rcc_periph_clock_enable(RCC_SPI2);

/* Configure SPI2: PB13(SCK), PB14(MISO), PB15(MOSI). */
gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_10_MHZ,
GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO_SPI2_SCK | GPIO_SPI2_MOSI);

gpio_set_mode(GPIOB, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO_SPI2_MISO);

/* Enable CS pin on PA5. */
gpio_set(GPIOA, GPIO5);
gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_10_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO5);

/* Explicitly disable I2S in favour of SPI operation */
SPI1_I2SCFGR = 0;

/* Set up SPI in Master mode with:
* Clock baud rate: 1/2 of peripheral clock frequency
* Clock polarity: Idle High
* Clock phase: Data valid on 2nd clock pulse
* Data frame format: 8-bit
* Frame format: MSB First
*/
spi_init_master(SPI2, SPI_CR1_BAUDRATE_FPCLK_DIV_64,
SPI_CR1_CPOL_CLK_TO_0_WHEN_IDLE,
SPI_CR1_CPHA_CLK_TRANSITION_1, SPI_CR1_DFF_8BIT, SPI_CR1_MSBFIRST);

/*
* Set NSS management to software.
*
* Note:
* Setting nss high is very important, even if we are controlling the GPIO
* ourselves this bit needs to be at least set to 1, otherwise the spi
* peripheral will not send any data out.
*/
spi_enable_software_slave_management(SPI2);
spi_set_nss_high(SPI2);
spi_enable(SPI2); /* Enable SPI2 periph. */
}
/* Set fast clock (depends on the CSD) */
void spi_set_full_speed(void)
{
/* spi_disable(SPI2); */
spi_set_baudrate_prescaler(SPI2, SPI_CR1_BAUDRATE_FPCLK_DIV_2);
/* spi_enable(SPI2); */
}


В чем может быть засада? проц 103 -й
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.0146 секунд с 7
ELECTRONIX ©2004-2016