Easyelectronics.ru

Электроника для всех
Текущее время: 17 окт 2019, 15:39

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: LPC4357 + SDRAM
СообщениеДобавлено: 04 ноя 2013, 19:44 
Заглядывает иногда

Зарегистрирован: 18 мар 2011, 15:24
Сообщения: 107
Откуда: Латвия, Рига
Имеем: LPC4357-EVB dev board и Крифо-косой фреймворк версии 1.03
Рабочаяя частота - 204МГц
EMC - делитель на 2 и частота 102МГц

Проблема в том, что никак не удаётся запустить EMC контроллер в паре со встроенной SDRAM (MT48L16M16A2 -75).

Писалось по образу и подобию образцов версии 1.01 (в той версии не удалось запустить USB HS). Значения всех регистров после инициализации совпадают. Единственное в чём различие - запись MODE в саму SDRAM. Но записывая значения из работающего кода, проблема не решается.

Симптомы:
начинаем записывать - всё хорошо
Изображение

начинаем читать - какая то фигня
Изображение
Вот теперь вопросы:
1) (запись регистра MODE) Почему отличается, зачем там нужен сдвиг влево?
Код:
//SDRAM_ADDR_BASE = DynAddr = 0x28 000 000
//v1.01  тут не совпадает комментарий и значения регистров
temp = *((volatile uint32_t *)(SDRAM_ADDR_BASE | (3<<4| 3)<<11)); /* 4 burst, 3 CAS latency */
//v1.03 тут ModeRegister=51 Col_len=8 or 9
temp = *((volatile uint32_t *) (DynAddr | (ModeRegister << Col_len)));


2)В каком месте ещё может быть проблема и что означает этот симптом?
3)Где ещё можно спросить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC4357 + SDRAM
СообщениеДобавлено: 04 ноя 2013, 20:17 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
HekuToc писал(а):
(запись регистра MODE) Почему отличается, зачем там нужен сдвиг влево?
Код:
//SDRAM_ADDR_BASE = DynAddr = 0x28 000 000
//v1.01  тут не совпадает комментарий и значения регистров
temp = *((volatile uint32_t *)(SDRAM_ADDR_BASE | (3<<4| 3)<<11)); /* 4 burst, 3 CAS latency */
//v1.03 тут ModeRegister=51 Col_len=8 or 9
temp = *((volatile uint32_t *) (DynAddr | (ModeRegister << Col_len)));
В первом случае сдвиг значений битовых полей обозначает положение этих полей в регистре. Посмотрите побитовую схему регистра в мануале - увидите, что первое значение 3 отстоит на (4+11=15) бит от правого конца, а второе значение 3 - на 11 бит от правого конца.

Во втором случае Col_len - это двоичный логарифм (степень, в которую надо возвести 2) размера блока памяти, соответствующего однй колонке массива ячеек SDRAM. Сдвиг на 8 влево - это умножение на 2 в степени 8, т.е. на 256; сдвиг на 9 - это умножение на 512.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC4357 + SDRAM
СообщениеДобавлено: 04 ноя 2013, 21:48 
Заглядывает иногда

Зарегистрирован: 18 мар 2011, 15:24
Сообщения: 107
Откуда: Латвия, Рига
Эмм нет. Я прекрасно понимаю функцию << . Я не понимаю, почему надо сдвигать на кол-во колонок. Где указано именно это число?
Изображение
Там же шина 13Бит. Если двигать, то что мы пошлём то? "Обрубок"?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC4357 + SDRAM
СообщениеДобавлено: 10 дек 2013, 20:01 
Заглядывает иногда

Зарегистрирован: 18 мар 2011, 15:24
Сообщения: 107
Откуда: Латвия, Рига
Проблема оказалась в том, что одновременное тактирование SD карты и SDRAM у этого чипа невозможна.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB