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

 
 
> LPC1788 и EMC, Есть ли промежуточные буферы (кэш)?
haker_fox
сообщение Dec 6 2016, 13:46
Сообщение #1


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Добрый день, дамы и господа!

Есть названный микроконтроллер и снаружи 2 микросхемы SDRAM по 32 Мбайт. Шина данных 32 бит, шина адреса 15 бит.

Память работает адекватно, по-крайней мере пока... Но появилось желание добавить тест. Пока начали с простейших тестов: неисправность ША и ШД. Алгоритм следующий (для ША): устанавливаем фиксированный адрес в пространстве SDRAM, и начинаем записывать "бегущую" единичку по этому адресу, контролируя запись считыванием. Алгоритм не сами придумали, а почитали умные документы) Но что интересно, когда шину данных коротишь капелькой припоя, штатная программа виснет, оно и понятно - память становится "повреждённой". Но тест этого не видит. Он считывает данные без ошибок. Выяснилось, что забыли переменную указателя адреса объявить volatile. Но это помогло, но как-то странно: в 1 случае из 10 тест стал выявлять замыкание. Мы подумали, что есть кэши и буфера, и добавили перебор адресов и данных (128) смежных ячеек. Результат тот-же: тест видит ошибку примерно каждый 10 запуск. Может быть кто-то сталкивался с тонкостями SDRAM? Что может влиять? Куда глядеть?

Спасибо!!!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Metallist64
сообщение Jan 29 2017, 09:07
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558



Прошу прощения за оффтоп.
Я вижу здесь собрались люди более или менее знающие. Посему хочется задать вопрос.
Есть ли возможность использовать EMC (LPC1778) для управления LCD с шиной данных - 8 бит(контроллер KS108). НО без шины адреса (в таких вещах обычно отсутствует)?!
Я так понимаю, что нормально EMC работать не будет. Нет такого режима - работать только с шиной данных.
По большому счету с LCD работаешь как с памятью. Которая отображается на экране.
Хочется узнать мнение знающих людей.



Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Jan 29 2017, 12:58
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894



Цитата(Metallist64 @ Jan 29 2017, 15:07) *
Есть ли возможность использовать EMC (LPC1778) для управления LCD с шиной данных - 8 бит(контроллер KS108). НО без шины адреса (в таких вещах обычно отсутствует)?!

Чип KS108 кроме линий данных имеет управляющие сигналы:
команда/данные (rs)
чтение/запись (r/w)
активизация интерфейса (eс)
сброс (reset).
Одну линию адреса придётся повесить на rs, иначе не будет возможности разделить команды и данные.
Есть возможность для фокуса. Линия адреса не обязательно должна быть А0. Можно использовать старший адрес, в линкере назначить индикатору адресное пространство ниже на одну команду. Примерно так(пример для 16бит шины) :
LCD (rw): ORIGIN = 0x600FFFFC, LENGTH = 2M
-------
Код
    .lcd (NOLOAD):
  {
    . = ALIGN(1);
    _slcd = .;       /* create a global symbol at ccmram start */
    *(.Alcd)
    *(.Alcd*)
    . = ALIGN(1);
    _elcd = .;       /* create a global symbol at ccmram end */
  } >LCD
----------
новая структура
Код
#define ALCD            __attribute__((section(".Alcd")))
ALCD static struct
{
    volatile uint16_t nc;
    volatile uint16_t reg;
    volatile uint16_t data;
}lcd; /// FMC_A19  LCD_RS
----------
Теперь доступна запись в индикатор
lcd.reg = 0xC1;
lcd.data = 0x41;
И небольшой фокус - запись потоком через дма, адрес для старта при этом &lcd.data. DMA будет автоматически увеличивать адрес, но для индикатора реально будет учитываться линия FMC_A19, которая постоянно будет в режиме "данные". Без перебирания адреса - шина может обнулить старые данные, даже если они не успели записаться.

Сообщение отредактировал IgorKossak - Jan 29 2017, 16:38
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post
Metallist64
сообщение Jan 30 2017, 11:46
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558



Цитата(AVI-crak @ Jan 29 2017, 15:58) *
Чип KS108 кроме линий данных имеет управляющие сигналы:
команда/данные (rs)
чтение/запись (r/w)
активизация интерфейса (eс)
сброс (reset).
Одну линию адреса придётся повесить на rs, иначе не будет возможности разделить команды и данные.
Есть возможность для фокуса. Линия адреса не обязательно должна быть А0. Можно использовать старший адрес, в линкере назначить индикатору адресное пространство ниже на одну команду. Примерно так(пример для 16бит шины) :
LCD (rw): ORIGIN = 0x600FFFFC, LENGTH = 2M


Спасибо за такой полный ответ. К сожалению я не совсем в него въехал.
Посему прошу прояснить некоторые моменты.
- EMC будет думать, что общается с внешней памятью и пытаться выставить и адрес и данные.
- Шину адреса мы будет игнорировать т.к. выставлять все будем через шину данных.
- Отправлять данные в KS108 придется по 2 раза (инструкция, а затем данные).
- Адресное пространство, которое будет отражаться в контроллере допустим: 0x8000 0000 - 0x83FF FFFF
должно будет содержать и инструкции и данные для KS108.
Затем записываются данные с адреса(в нашем случае) 0x8000 0000 и запускаем EMC на передачу?




Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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