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

 
 
 
Reply to this topicStart new topic
> SDIO интерфейс STM32F407, Не понятна работа
isz
сообщение Jul 25 2016, 08:44
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 2-10-09
Из: Екатеринбург
Пользователь №: 52 693



Добрый день.
Не могу разобраться с работой интерфейса SDIO.
Шлю по очереди команды CMD0, CMD8, CMD55.
Команда 0 без ответа. После команды 8 получаю нормально ответ (опросом бит CTIMEOUT, CMDREND, CCRCFAIL региста STA. Как и положено бит выставляется после получения ответа.
Проблема возникает при отправке следующей команды. Функция отправки команды отдает сразу управления не дожидаясь получения ответа. Соответственно и в регистре RESPCMD содержится старая команда CMD8.

Код функции отправки команд:

Код
SDIO->ICR=(SDIO_ICR_CCRCFAILC | SDIO_ICR_CTIMEOUTC | SDIO_ICR_CMDRENDC | SDIO_ICR_CMDSENTC);

SDIO->ARG=argument;
SDIO->CMD=(uint32_t)(cmd&SDIO_CMD_CMDINDEX)|respType|SDIO_CMD_CPSMEN;

if (respType==NoResponse)
{
    while (!(SDIO->STA & (SDIO_STA_CTIMEOUT | SDIO_STA_CMDSENT))) {};
}
else
{
    while (!(SDIO->STA & (SDIO_STA_CTIMEOUT | SDIO_STA_CMDREND | SDIO_STA_CCRCFAIL))) {};
}

response[0]=SDIO->RESP1;
response[1]=SDIO->RESP2;
response[2]=SDIO->RESP3;
response[3]=SDIO->RESP4;


Вот что видно в логическом анализаторе. Линия D6 - это вывод отладки. Переключаю его состояние при выходе из функции отправки. Видно, что при отправке последней команды контроллер выходит из функции в самом начале. Перед командой 55 поставлена искусственная задержка.



Заранее благодарю за помощь.
Go to the top of the page
 
+Quote Post
isz
сообщение Jul 25 2016, 13:10
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 2-10-09
Из: Екатеринбург
Пользователь №: 52 693



Строкой SDIO->ICR=(SDIO_ICR_CCRCFAILC | SDIO_ICR_CTIMEOUTC | SDIO_ICR_CMDRENDC | SDIO_ICR_CMDSENTC); должны были очищаться биты CCRCFAILC, CTIMEOUTC, CMDRENDC, CMDSENTC регистра STA.
По факту этого не происходило. Первое чтение регистра давала старые данные. При повторном чтении регистр STA регистр был уже сброшен.

Как вариант 2 раза читать регистр STA.

Но еще лучше окончание передачи команды и получения ответа (или таймаута) отслеживать путем тестирования бита CMDACT регистра STA.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jul 25 2016, 14:06
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Вы работаете с девайсом, который работает асинхронно с Вашей программой.
Поэтому вполне могобыть, что когда Вы от него чего-то хотите, оно занято.
Поэтому перед любым обращением к нему опрашивайте регистр статуса или состояния, не знаю как оно в этом случае наз-ся.
А тем более - при засылке нескольких команд последовательно, в частоности "долгоиграющих" вроде записи и стирания.
Если при подборе задержек между посылаемыми командами девайс становится работоспособным - то это ОНО.

Go to the top of the page
 
+Quote Post
bureau
сообщение Oct 1 2016, 08:58
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 625
Регистрация: 22-02-07
Пользователь №: 25 593



Цитата(isz @ Jul 25 2016, 11:44) *
Вот что видно в логическом анализаторе.

Вопрос не по теме...
Какую модель анализатора используете?
Go to the top of the page
 
+Quote Post
isz
сообщение Oct 4 2016, 12:08
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 2-10-09
Из: Екатеринбург
Пользователь №: 52 693



Добрый день.
Железо: клон saleae logic
ПО: https://sigrok.org/
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 12:19
Рейтинг@Mail.ru


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