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

 
 
> Atmel SAM3U4, Различные вопросы
sonycman
сообщение Jun 26 2011, 18:46
Сообщение #1


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Доброго времени суток!
Начал потихоньку осваивать SAM3U4C, сделал темку, так как возникают различные вопросы, которые хотелось бы обсудить.

В этом камне, не смотря на два банка, RAM можно использовать как единый блок по адресам 0x20078000 - 0x20083FFF.

Можно ли такую же методику применить к флеш?
В комплекте с ИАРом идёт флешлоадер, который шьёт сразу два банка по адресам 0x000E0000 - 0x0011FFFF.

Сделал в .icf файле также, посмотрим, как получится на практике, если вместо 0x00080000 везде в программе использовать 0x000E0000.

Ещё хотел спросить про встроенный RTC, если кто им пользовался.

Я так понял, что модифицировать время тут не так просто - надо сначала остановить часы, записать новые значения, запустить их, и подождать около 1 секунды, пока можно будет проводить следующую модификацию.
Вот что интересно - после записи и запуска часов сбрасывается ли прескалер секунд? То есть переход на следующую секунду наступит ровно через секунду после запуска, или раньше, в зависимости от значения прескалера?
Go to the top of the page
 
+Quote Post
11 страниц V  « < 3 4 5 6 7 > »   
Start new topic
Ответов (60 - 74)
singlskv
сообщение Sep 12 2011, 23:22
Сообщение #61


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Sep 13 2011, 02:51) *
ообще, я бы IAP-функцию использовал, наверное - меньше телодвижений и расхода RAM нет.
В конечном продукте наверное использую IAP
но понять что я делаю не так при размещении функций в SRAM хотелось-бы...



может я еще что-нить недопонял в настройке басматрикск ?
у меня пока вот такЖ
Код
  ldr r1, =MATRIX_BASE_ADDRESS
  ldr r0, =(2 << MATRIX_SCFG0_DEFMSTR_TYPE_BIT) | (1 << MATRIX_SCFG0_FIXED_DEFMSTR_BIT)
  str r0, [r1, #MATRIX_SCFG0_BASE_OFFSET]
  str r0, [r1, #MATRIX_SCFG1_BASE_OFFSET]
  ldr r0, =(2 << MATRIX_SCFG0_DEFMSTR_TYPE_BIT) | (0 << MATRIX_SCFG0_FIXED_DEFMSTR_BIT)
  str r0, [r1, #MATRIX_SCFG3_BASE_OFFSET]
  str r0, [r1, #MATRIX_SCFG4_BASE_OFFSET]

Go to the top of the page
 
+Quote Post
sonycman
сообщение Sep 22 2011, 18:22
Сообщение #62


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Потихоньку пишу инициализацию карты памяти контроллером HSMCI.

Дошёл до команды ACMD41, после выдачи которой необходимо ждать, пока не снимется статус BUSY.
В мануале это делается опросом флага NOTBUSY регистра статуса, пока он не установится в 1.

Но проблема в том, что этот флаг находится в 1 сразу после завершения команды sad.gif

То есть как только устанавливается CMDRDY, опрашиваю NOTBUSY - он всегда в единичке.

Соответственно инициализация карты не завершается, в ответе команды ACMD41 (регистр OCR карты памяти) биты 31 и 30 сброшены...
Если подождать около секунды и повторно выдать ACMD41 - то в ответе уже всё ОК - бит 31 установлен (инициализация завершена) и 30 сообщает правильную информацию, является ли карта SDHC или нет.

Спрашивается - почему контроллер HSMCI не выполняет ожидание статуса BUSY?

Может быть, я что-то делаю не так?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 22 2011, 19:57
Сообщение #63


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Sep 22 2011, 22:22) *
Спрашивается - почему контроллер HSMCI не выполняет ожидание статуса BUSY?

Может быть, я что-то делаю не так?

Это не тот busy, который умеет ждать хост. ACMD41 нужно подавать в цикле до тех пор пока не сбросится 31-й бит или не случится тайм-аут инициализации (софтовый, естественно).
Go to the top of the page
 
+Quote Post
sonycman
сообщение Sep 23 2011, 01:37
Сообщение #64


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Sep 22 2011, 23:57) *
Это не тот busy, который умеет ждать хост. ACMD41 нужно подавать в цикле до тех пор пока не сбросится 31-й бит или не случится тайм-аут инициализации (софтовый, естественно).

Даже так sm.gif
Значит попробую подождать в цикле, пока 31 бит в ответе не установится, спасибо!
Go to the top of the page
 
+Quote Post
sonycman
сообщение Sep 23 2011, 16:29
Сообщение #65


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Инициализация карты у меня получается такая:
PowerOn -> CMD0 -> CMD8 -> ACMD41 -> CMD2 -> CMD3 -> CMD9 -> CMD7 -> ACMD6.

Дошёл пока до CMD9 включительно, вроде всё ОК.

Хотел ещё спросить по поводу операций с блоками - в поле Transfer Type (TRTYP) регистра комманд HSMCI_CMDR какие нужно выбирать значения для single и multiple блоков?
Вроде как 0 для одно- и 1 для много- секторных чтения\записи, но вот смущает ещё значение 5 - SDIO Block... rolleyes.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 23 2011, 16:52
Сообщение #66


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Sep 23 2011, 20:29) *
Инициализация карты у меня получается такая:
PowerOn -> CMD0 -> CMD8 -> ACMD41 -> CMD2 -> CMD3 -> CMD9 -> CMD7 -> ACMD6.

А у меня такая:
PowerOn -> CMD0 -> CMD8 -> ACMD41 -> CMD2 -> CMD3 -> CMD7 (select) -> ACMD51 -> ACMD6 (только если поддерживается 4 бита) -> Проверка и выбор high speed (CMD6), если версия спецификации >= 2 -> CMD7 (deselect) -> CMD9 -> Установка скорости интерфейса

Цитата(sonycman @ Sep 23 2011, 20:29) *
Хотел ещё спросить по поводу операций с блоками - в поле Transfer Type (TRTYP) регистра комманд HSMCI_CMDR какие нужно выбирать значения для single и multiple блоков?
Вроде как 0 для одно- и 1 для много- секторных чтения\записи, но вот смущает ещё значение 5 - SDIO Block... rolleyes.gif

SDIO и SD Memory - это совсем разные вещи.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Sep 23 2011, 17:00
Сообщение #67


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Спасибо!
Цитата(aaarrr @ Sep 23 2011, 20:52) *
если версия спецификации >= 2 -> CMD7 (deselect) -> CMD9 -> Установка скорости интерфейса

А вот тут можно разъяснить, для чего делать deselect? Ведь CMD9 можно выдать вообще до CMD7 (select)?
Или это имеет отношение к CMD6?

Цитата
SDIO и SD Memory - это совсем разные вещи.

Вот оно что, а у меня эти понятия перемешались вместе sm.gif

Цитата
только если поддерживается 4 бита
- неужели встречаются карточки без поддержки 4 бит?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 23 2011, 17:22
Сообщение #68


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Sep 23 2011, 21:00) *
А вот тут можно разъяснить, для чего делать deselect? Ведь CMD9 можно выдать вообще до CMD7 (select)?
Или это имеет отношение к CMD6?

CMD9 можно выдать только карте в "stby", а ACMD51 - только в "tran", поэтому сначала карта выбирается через CMD7 (select), затем переводится в "stby" через CMD7 (deselect).
Можно сделать так:
PowerOn -> CMD0 -> CMD8 -> ACMD41 -> CMD2 -> CMD3 -> CMD9 -> CMD7 (select) -> ACMD51 -> ACMD6 (только если поддерживается 4 бита) -> Проверка и выбор high speed (CMD6), если версия спецификации >= 2 -> Установка скорости интерфейса

Наврал, нельзя.

Цитата(sonycman @ Sep 23 2011, 21:00) *
- неужели встречаются карточки без поддержки 4 бит?

Ну, как бы надо проверять, если уж все делать честно. Не встречал до сих пор sm.gif
Go to the top of the page
 
+Quote Post
sonycman
сообщение Sep 23 2011, 17:25
Сообщение #69


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Sep 23 2011, 21:21) *
Можно сделать так:
PowerOn -> CMD0 -> CMD8 -> ACMD41 -> CMD2 -> CMD3 -> CMD9 -> CMD7 (select) -> ACMD51 -> ACMD6 (только если поддерживается 4 бита) -> Проверка и выбор high speed (CMD6), если версия спецификации >= 2 -> Установка скорости интерфейса

Да, да, я тоже такого мнения sm.gif

А вот последний пункт - Установка скорости интерфейса - это что означает? Это разве не одно и то же с high speed?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 23 2011, 17:30
Сообщение #70


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Sep 23 2011, 21:25) *
А вот последний пункт - Установка скорости интерфейса - это что означает? Это разве не одно и то же с high speed?

Нет, это выбор режима. Причем после выбора high speed меняются поля в CSD, так что CMD9 нужно все же давать в конце. Скорость интерфейса устанавливается на основании данных из этих полей.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Sep 23 2011, 17:44
Сообщение #71


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Sep 23 2011, 21:30) *
Нет, это выбор режима. Причем после выбора high speed меняются поля в CSD, так что CMD9 нужно все же давать в конце. Скорость интерфейса устанавливается на основании данных из этих полей.

То есть это установка макс. частоты интерфейса?
Я почему то думал, раз карта поддерживает HS, то без проблем должна работать на 50 МГц.
Значит, это не так?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 23 2011, 18:14
Сообщение #72


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Sep 23 2011, 21:44) *
То есть это установка макс. частоты интерфейса?
Я почему то думал, раз карта поддерживает HS, то без проблем должна работать на 50 МГц.
Значит, это не так?

Максимальная частота прописана в CSD, ориентироваться нужно исключительно на эти данные. Они в свою очередь зависят от наличия и выбора режима HS.
То есть если сравнить CSD до свистопляски с CMD6 и после, то он будет содержать разные значения.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 15 2011, 10:28
Сообщение #73


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Хм, этот HSMCI вообще может корректно обрабатывать статус BUSY карты памяти?

Подаю команду CMD7 подряд два раза - просто для интереса, чтобы посмотреть, как меняется статус карточки.
Первый раз она обрабатывается нормально, но во второй получаю ошибку таймаута ответа (RTOE: Response Time-out Error)... sad.gif

Вероятно, карточка всё ещё находится в состоянии BUSY после первой команды CMD7, и этот статус опять не обрабатывается контроллером angry.gif

Но почему? Ведь тип ответа команды задаю правильно - R1b?
Разве это не означает, что контроллер должен автоматически ожидать, пока карта не снимет BUSY?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 15 2011, 10:40
Сообщение #74


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Dec 15 2011, 14:28) *
Но почему? Ведь тип ответа команды задаю правильно - R1b?
Разве это не означает, что контроллер должен автоматически ожидать, пока карта не снимет BUSY?

Нет. Это означает, что программа должна дождаться флага NOTBUSY в SR.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 15 2011, 10:43
Сообщение #75


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Dec 15 2011, 14:40) *
Нет. Это означает, что программа должна дождаться флага NOTBUSY в SR.

Поставил ожидание:
Код
do
        {
            status = AT_MCI0->MCI_SR;
        }
        while (!(status & AT_MCI_NOTBUSY));

но никакого эффекта... sad.gif
Что делать - то?

Похоже, повторяется ситуация, как с командой ACMD41 - флаг NOTBUSY устанавливается мгновенно с CMDRDY...

ЗЫ: если ждать нужно ручками - зачем тогда вообще ввели специальный тип команды с ответом R1b? Толку то нет.

ЗЗЫ: а, так тут наверное я сам напортачил - подавать CMD7(SELECT) два раза подряд, наверное, нельзя.
Вот карточка и входит в ступор...
Сейчас попробую сначала CMD7(SELECT), а потом сразу CMD7(DESELECT)...
Go to the top of the page
 
+Quote Post

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

 


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


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