Перейти к содержанию
    

Polling выдаёт ошибку, а interrupt мне не подходит. Да и непонятно почему запись проходит в ДМА, а чтение - нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. УМВР без подтяжки. Достаточно включить внутреннюю подтяжку.

2. Какая нафиг подтяжка на CLK?

3. При работе с ДМА нужно сразу взять за правило делать align 4 всех данных.

4. По возможности отказаться от использования индусских либ и вдумчиво читать реф. мануалы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пытаюсь "поженить" scmRTOS на stm32f103 с SD картой fatfs через стмовский драйвер по SDIO интерфейсу.

процесс с обработчиком SD-карты имеет самый низкий приоритет.

проблема заключается в том, что при чтении с карты виснет время от времени после посылки команды на чтение.

что в режиме дма, что в режиме прерываний. выяснил, что если ОС прерывает процесс между посылкой команды и обработкой ответа на команду в процедуре CmdResp1Error, в которой сбрасываются флаги прерываний модуля sd, буфер фифо успевает заполниться и соответственно после сброса флагов прерывание не возникает.

вопрос состоит в том, как безболезненно заблокировать ОС на эти пару команд?

худо-бедно начинает работать при делителе тактового сигнала на 30 примерно 2 МГц.

без ОС все работает.

Изменено пользователем dezna

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пытаюсь "поженить" scmRTOS на stm32f103 с SD картой fatfs через стмовский драйвер по SDIO интерфейсу.

вопрос состоит в том, как безболезненно заблокировать ОС на эти пару команд?

TCritSect cs;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

TCritSect cs;

если не трудно объясните пожалуйста что это даст, и как этим воспользоваться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что это такое разобрался, но в документации нет примера использования.

конструктор вызываю.

как вызвать деструктор? я в с++ пока не горазд. начал изучать только из-за ОС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

деструктор вызовется компилятором при выходе из секции.

а нельзя ли принудительно его вызвать?

код просто написан так, что в теле одного блока нужно запретить/разрешить.

драйвер SD карты взят от STM. а там упаришься переделывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а нельзя ли принудительно его вызвать?

код просто написан так, что в теле одного блока нужно запретить/разрешить.

драйвер SD карты взят от STM. а там упаришься переделывать.

При выходе из блока автоматически будет вызван деструктор, который восстановит состояние,

предшествовавшее входу в критическую секцию. Т.е. при таком способе отсутствует возможность

«забыть» разрешить прерывания при выходе из критической секции.

 

P.S. для обсуждения scmRTOS есть отдельный форум scmRTOS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Блин, столкнулся с тем, что SD-коннекторы бывают с нормльно замкунытым пином SD-Detect!

Теперь придется два варианта программы делать, смотря что на плату напаяют (там 2 футпринта совмещены).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Блин, столкнулся с тем, что SD-коннекторы бывают с нормльно замкунытым пином SD-Detect!

Теперь придется два варианта программы делать, смотря что на плату напаяют (там 2 футпринта совмещены).

зачем 2 варианта? если есть свободная нога контроллера, то в зависимости от держателя замыкать или нет на землю.

нога как вход с подтяжкой. замыкать - дорожка под обрезание, или перемычка на ПП под каплю припоя.

а программа при старте анализирует и соответственно реагирует. или например делать исключающее или ножек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня и так стоят 4 джампера конфигурирования, но они для оперативного конфигурирования, кторое может меняться. в процессе эксплуатации. А смысл пина в коннекторе может меняться только при производстве, поэтому еще на это ножку тратить неохота.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Столкнулся с проблемой:

 

Делаю

 

Status = SD_Init();

 

ответ Status = SD_OK;

 

Status = SD_GetCardInfo(&SDCardInfo);

 

ответ Status = SD_OK;

 

Status = SD_SelectDeselect((uint32_t) (SDCardInfo.RCA << 16));

 

ответ Status = SD_CMD_RSP_TIMEOUT;

 

 

В чем причина? На низком уровне пишет/читает блок. Карточка microSD 1Gb.

Изменено пользователем A.Lex

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...