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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> STM32F215 sdio, нет клока
Vladimir Prokofi...
сообщение Jul 28 2011, 08:03
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 9-03-11
Пользователь №: 63 481



Собственная плата на 215 контроллере, SD_Init возвращает ошибку -- истек таймаут.

На ноге клок не видно вообще ничего, земля и все. На этом контроллере sdio как и на всех, на порте C и D висит.

Подтягивающие резисторы припаяны всюду, кроме клока.

В чем может быть проблема? И должен ли я видеть клок после SDIO_ClockCmd(ENABLE); если в настройках указано

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD, ENABLE);
//RCC_APB2PeriphClockCmd( RCC_APB2Periph_SDIO, ENABLE );

GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_SDIO);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_SDIO);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SDIO);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SDIO);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SDIO);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_SDIO);

// Configure PC.08, PC.09, PC.10, PC.11 pins: D0, D1, D2, D3 pins
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOC, &GPIO_InitStructure);

// Configure PD.02 CMD line
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOD, &GPIO_InitStructure);

// Configure PC.12 pin: CLK pin
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &GPIO_InitStructure);


//!< Power ON Sequence ---------------------------------------------------
//!< Configure the SDIO peripheral
//!< SDIOCLK = HCLK, SDIO_CK = HCLK/(2 + SDIO_INIT_CLK_DIV
//!< on STM32F2xx devices, SDIOCLK is fixed to 48MH
//!< SDIO_CK for initialization should not exceed 400 KHz
//SDIO_InitStructure2.SDIO_ClockDiv = 0x76;
SDIO_InitStructure2.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
SDIO_InitStructure2.SDIO_ClockBypass = SDIO_ClockBypass_Disable;
SDIO_InitStructure2.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;
SDIO_InitStructure2.SDIO_BusWide = SDIO_BusWide_1b;
SDIO_InitStructure2.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;
SDIO_Init(&SDIO_InitStructure2);

//!< Set Power State to ON */
SDIO_SetPowerState(SDIO_PowerState_ON);


SDIO_ClockCmd(ENABLE);

while( 1);

Сообщение отредактировал Vladimir Prokofiev - Jul 28 2011, 08:04
Go to the top of the page
 
+Quote Post
Flexz
сообщение Jul 28 2011, 09:12
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Кхм.. а клоки на SDIO действительно не включаете?
Go to the top of the page
 
+Quote Post
Vladimir Prokofi...
сообщение Jul 28 2011, 10:08
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 9-03-11
Пользователь №: 63 481



Цитата(Flexz @ Jul 28 2011, 13:12) *
Кхм.. а клоки на SDIO действительно не включаете?


Вы об
//RCC_APB2PeriphClockCmd( RCC_APB2Periph_SDIO, ENABLE );
?

И так и так пробовал, разницы нет. Оно должно быть выключено? Для эвалборды у СТ вызывается функция Деинит в которой они включают клоки и сразу выключают. Но я запускал и собственно пример, тоже самое.

Если в бесконечном цикле вызывать SI_Init() то на этих ногах что-то есть, но странное.
D0 и D1 5 раз переходят в разное состояние, потом выходят на верхний уровень (подтяжка к VCC )
D2 B D3 В этот же момент переключаются в нижний уровень, потом выходят на верхний.
А вот клока все одно нет и все.

При этом если вызвать только один раз SI_Init() то все ноги в покое -- все кроме клока в 1, клок в 0.
Go to the top of the page
 
+Quote Post
Flexz
сообщение Jul 28 2011, 10:37
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Вообще-то да, на любую периферию клоки надо включать предварительно. F103 помнится вообще HardFault влетал, если начать настраивать что-то не включая клок.
А примеры внимательнее читать надо sm.gif (либо может они у вас старо-глючные)

вот код деинита из сэмплов
Код
void SDIO_DeInit(void)
{
  RCC_APB2PeriphResetCmd(RCC_APB2Periph_SDIO, ENABLE);
  RCC_APB2PeriphResetCmd(RCC_APB2Periph_SDIO, DISABLE);
}

вкл-выкл что? резет, а не клоки. А перед деинитом вызывается SD_LowLevel_Init() который настраивает ноги и включает клок на SDIO:
RCC_AHB1PeriphClockCmd(SD_SDIO_DMA_CLK, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE);

без этого не работает.

У вас отладочная плата есть или только своя?

Сообщение отредактировал Flexz - Jul 28 2011, 13:35
Go to the top of the page
 
+Quote Post
Vladimir Prokofi...
сообщение Jul 28 2011, 10:41
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 9-03-11
Пользователь №: 63 481



Цитата(Flexz @ Jul 28 2011, 14:37) *
У вас отладочная плата есть или только своя?


Своя только) Есть отладочная на 103...
Да, вы правы, ошибочка вышла, ща попробуем...

Сообщение отредактировал Vladimir Prokofiev - Jul 28 2011, 10:41
Go to the top of the page
 
+Quote Post
Flexz
сообщение Jul 28 2011, 10:46
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Попробовал сейчас у себя, да клок начинает выдываться сразу после SDIO_ClockCmd(ENABLE);
Go to the top of the page
 
+Quote Post
Vladimir Prokofi...
сообщение Jul 28 2011, 11:01
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 9-03-11
Пользователь №: 63 481



Цитата(Flexz @ Jul 28 2011, 14:46) *
Попробовал сейчас у себя, да клок начинает выдываться сразу после SDIO_ClockCmd(ENABLE);

Нет все равно клока нету)
Я открыл шаблон, добавил в него пример про микроСД, в настройках проекта указал 215 контроллер. А клока все равно нет... А у вас какой контроллер?

Сообщение отредактировал Vladimir Prokofiev - Jul 28 2011, 11:04
Go to the top of the page
 
+Quote Post
Flexz
сообщение Jul 28 2011, 11:13
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



stm32f217zgt6, пользую отладочную плату от стартеркита, пока свои ждут комплектации.
Еще один шальной комент у вас в коде заметил

//SDIO_InitStructure2.SDIO_ClockDiv = 0x76;

но, вроде бы и без него клок должен быть, хотя и слишком быстрый для инициализации
Go to the top of the page
 
+Quote Post
Vladimir Prokofi...
сообщение Jul 28 2011, 12:29
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 9-03-11
Пользователь №: 63 481



Спаял новую плату, с новым мк, на всякий случай. На плате вообще ничего нет, контроллер только и все.
Запускаем пример uSDCard клока на 53 ноге ( PC12 ) нету все равно...
Go to the top of the page
 
+Quote Post
Flexz
сообщение Jul 28 2011, 13:34
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



У меня мыслей больше нету..
Я там скосячил несколькими постами выше, неглядя скопипастил не то
должно быть
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE);
а не
RCC_AHB1PeriphClockCmd(SD_SDIO_DMA_CLK, ENABLE);

Кстати, насчет новых МК, с f103 были преценденты - вроде рабочий код, а глючит, перепаиваем другой проц - работает. Толи непропай, толи проц битый, но было несколько раз.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 28 2011, 18:32
Сообщение #11


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



А тактирование AFIO в 2xx разве не надо включать?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Flexz
сообщение Jul 29 2011, 06:11
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



не, F2xx нету такой штуки как AFIO. Точнее коммутация альтернативных функций теперь встроена в контроллер GPIO, где ей и место.
Go to the top of the page
 
+Quote Post
Vladimir Prokofi...
сообщение Aug 12 2011, 13:23
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 9-03-11
Пользователь №: 63 481



Начал сначала. Собрал все в одну функцию -- переписывал из примера, чтобы понятней было. Когда доходим до while(1) на этой ноге все так же отсутствует клок.
При этом я сначала ее инициализирую как OUT и я вижу что она дергается, работает типо. После while(1) она в нуле постоянно... Что делать? Совсем беда...

CODE
void mySDInit( void ){
uint32_t regSDIO_CLKCR;


GPIO_InitTypeDef GPIO_InitStructure;
SDIO_InitTypeDef SDIO_InitStructure;

/* GPIOC and GPIOD Periph clock enable */
RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD, ENABLE );
/* Enable the SDIO APB2 Clock */
RCC_APB2PeriphClockCmd( RCC_APB2Periph_SDIO, ENABLE );




/* Configure PC.12 pin: CLK pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &GPIO_InitStructure);

GPIOC->BSRRL = GPIO_Pin_12;
GPIOC->BSRRH = GPIO_Pin_12;
GPIOC->BSRRL = GPIO_Pin_12;
GPIOC->BSRRH = GPIO_Pin_12;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_Init(GPIOC, &GPIO_InitStructure);


/* Configure PD.02 CMD line */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOD, &GPIO_InitStructure);

/* Configure PC.08, PC.09, PC.10, PC.11 pins: D0, D1, D2, D3 pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_Init(GPIOC, &GPIO_InitStructure);


GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_SDIO);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_SDIO);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SDIO);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SDIO);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SDIO);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_SDIO);


RCC_APB2PeriphResetCmd(RCC_APB2Periph_SDIO, ENABLE);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_SDIO, DISABLE);

SDIO_InitStructure.SDIO_ClockDiv = SDIO_INIT_CLK_DIV;
SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Enable;
SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;
SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b;
SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;
SDIO_Init(&SDIO_InitStructure);

/*!< Set Power State to ON */
SDIO_SetPowerState(SDIO_PowerState_ON);

/*!< Enable SDIO Clock */
SDIO_ClockCmd(ENABLE);

regSDIO_CLKCR = SDIO->CLKCR;

while( 1 );
}


Прошу прощение за отсутствие форматирования. Если добавлять с форматированием, то видно не весь код, почему-то

Посмотрел регистр SDIO->CLKCR = 1142. Т.е. бит клока реально не выставлен. Если ему руками написать что-то типо
SDIO->CLKCR = SDIO->CLKCR | ( 1 << 8 );
а потом прочитать, то увижу опять 1142 а не 1398. Т.е это бит не выставляется, почему-то... Есть идеи?



Сообщение отредактировал Vladimir Prokofiev - Aug 12 2011, 12:57
Go to the top of the page
 
+Quote Post
Vladimir Prokofi...
сообщение Aug 15 2011, 08:36
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 9-03-11
Пользователь №: 63 481



После
SDIO_SetPowerState(SDIO_PowerState_ON);
Соответствующие биты в регистре питания тоже не выставляются. Регистр нулевой до и после подачи питания, хотя эта функция как раз и выставляет эти биты.
Я ждал после записи в регистр Delay(100) так как в даташите написано что перед новой записью надо подождать определенное время.
Не могу понять почему не получается записывать в регистры...

Таким образом удается записать новое значение в регистр только внутри SDIO_Init...

Сообщение отредактировал Vladimir Prokofiev - Aug 15 2011, 08:37
Go to the top of the page
 
+Quote Post
Taran87
сообщение Jun 14 2012, 11:43
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 12-05-09
Пользователь №: 48 986



У меня такая же проблема с SDIO, но на МК stm32f417zg. Подскажи ты ее смог решить?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:05
Рейтинг@Mail.ru


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