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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> LPC1788 и EMC, Есть ли промежуточные буферы (кэш)?
haker_fox
сообщение Dec 6 2016, 13:46
Сообщение #1


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

Группа: Свой
Сообщений: 2 552
Регистрация: 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
zltigo
сообщение Dec 6 2016, 15:14
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 323
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Конкретно с этим чипом дел не имел. Но то, что кешей там нет, это практически наверняка. Для понимания настроек и работы контролера зайти на ARM и скачать документацию на IP ядро контролера памяти - NXP использует ARM-овские и посему тупит с документацией sad.gif. Проходил все это на LPC2xxx sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
skripach
сообщение Dec 6 2016, 16:05
Сообщение #3


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 027
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата(haker_fox @ Dec 6 2016, 16:46) *
Что может влиять? Куда глядеть?

Я думаю вам нужно изучить как работает SDRAM, подозреваю что откроете для себя много нового. Шина адреса SDRAM и шина адреса у простейшей SRAM это разные вещи. Грубо говоря можно прочитать один и тот же байт данных используя разные комбинации на шине адреса.




--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 7 2016, 09:19
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 698
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Тайминги проверяли-перепроверяли?
У коллеги была схожая ситуация - оказалось дело в настройках таймингов.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 8 2016, 10:37
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 049
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(zltigo @ Dec 6 2016, 18:14) *
Конкретно с этим чипом дел не имел. Но то, что кешей там нет, это практически наверняка.

Ошибаетесь. Хоть маленький, но всё же есть. wink.gif
См. параграф 9.5.4 юзермануала LPC1778/1788:
The AHB interface reads and writes via buffers to improve memory bandwidth and reduce
transaction latency. The EMC contains four 16-word buffers. The buffers can be used as
read buffers, write buffers, or a combination of both.


Цитата(haker_fox @ Dec 6 2016, 16:46) *
Мы подумали, что есть кэши и буфера, и добавили перебор адресов и данных (128) смежных ячеек. Результат тот-же: тест видит ошибку примерно каждый 10 запуск.

А хорошо подумали? sm.gif
Попробуйте заполнить весь объём (ну или его значительную часть) чипа псевдослучайной последовательностью с определённым стартовым seed.
А потом весь этот объём считать, стартовав псевдослучайный генератор с того-же seed. И сравнить.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Dec 9 2016, 01:09
Сообщение #6


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

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



QUOTE (demiurg_spb @ Dec 7 2016, 17:19) *
Тайминги проверяли-перепроверяли?
У коллеги была схожая ситуация - оказалось дело в настройках таймингов.

Уже сижу перепроверяю rolleyes.gif


QUOTE (jcxz @ Dec 8 2016, 18:37) *
А потом весь этот объём считать, стартовав псевдослучайный генератор с того-же seed. И сравнить.

Спасибо, вам!


--------------------
Желаю всем гармонии с самими собой!
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 9 2016, 08:40
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 049
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(haker_fox @ Dec 9 2016, 04:09) *
Спасибо, вам!

Да не за что, сам недавно тестил. И как раз на LPC1788 wink.gif
Правда я проверял не качество монтажа, а работу режима Self Refresh
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Dec 10 2016, 09:43
Сообщение #8


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

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



QUOTE (jcxz @ Dec 9 2016, 16:40) *
Да не за что, сам недавно тестил. И как раз на LPC1788 wink.gif
Правда я проверял не качество монтажа, а работу режима Self Refresh

Сделал заполнение объёма рандомом, как вы и посоветовали... В общем у меня неправильно был сконфигурирован EMC, и вместо 64 Мб в системе было 16, причём каждый 16 Мб блок маппился на один и тот же адрес... Теперь все тесты проходят. Правда тест с ногами отдельно не прогонял, времени пока не было, но тест рандомом с разными seedами был запущен 100 раз в цикле, и ни одного сбоя!

Не порекомендуете лёгкое для чтения чтиво по принципу работы SDRAM? rolleyes.gif Так, чтобы не погрузить себя в дебри, и более-менее понять принцип работы этой памяти? До сих пор толком не знаю, как она устроена))) Ну кроме элементарного уровня.


--------------------
Желаю всем гармонии с самими собой!
Go to the top of the page
 
+Quote Post
Mihey_K
сообщение Dec 16 2016, 03:35
Сообщение #9


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

Группа: Участник
Сообщений: 156
Регистрация: 27-09-06
Из: Irkutsk
Пользователь №: 20 747



Цитата(jcxz @ Dec 8 2016, 18:37) *
Ошибаетесь. Хоть маленький, но всё же есть. wink.gif
+1


Цитата
9.5.4 Data buffers
The AHB interface reads and writes via buffers to improve memory bandwidth and reduce
transaction latency. The EMC contains four 16-word buffers. The buffers can be used as
read buffers, write buffers, or a combination of both. The buffers are allocated
automatically.
The buffers must be disabled during SDRAM initialization. The buffers must be enabled
during normal operation.
The buffers can be enabled or disabled for static memory using the EMCStaticConfig
Registers.


Попробуйте забить этот буфер, данные должны обновиться.


--------------------
Блог о разработке на CC430, SIM900, GPS, ARM и не только...
Go to the top of the page
 
+Quote Post
Metallist64
сообщение Jan 29 2017, 09:07
Сообщение #10


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

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



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



Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 29 2017, 12:47
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 049
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



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

А как тогда данные пересылаются в LCD? Просто пиксель за пикселем строка за строкой вся картинка сразу?
И какие сигналы управления?
Я думаю - можно. Изучить сигналы управления в EMC, сравнить их с сигналами LCD и подумать можно ли состыковать.
А потом - просто скопировать весь объём данных как будто просто в память.
Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Jan 29 2017, 12:58
Сообщение #12


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

Группа: Участник
Сообщений: 97
Регистрация: 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
haker_fox
сообщение Jan 29 2017, 14:50
Сообщение #13


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

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



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

Сейчас нет бумажки на LPC1788, а качать и смотреть -лень. Поэтому, посмотрите, может ли DMA выбрасывать данные на порты. Если да, то мне кажется, оптимальнее сделать именно через порты ввода-вывода. Как-то прозрачнее получается, что-ли. И ресурсы проца тратить не будете тоже.


--------------------
Желаю всем гармонии с самими собой!
Go to the top of the page
 
+Quote Post
Metallist64
сообщение Jan 30 2017, 11:46
Сообщение #14


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

Группа: Участник
Сообщений: 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
AVI-crak
сообщение Feb 27 2017, 13:51
Сообщение #15


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

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



Цитата(Metallist64 @ Jan 30 2017, 17:46) *
Спасибо за такой полный ответ. К сожалению я не совсем в него въехал.

Фигасе, даже на почту прилетело, а почта медленная.

Мк не может игнорировать адрес, чисто физически. Если он куда-то пишет данные - то ему необходим чёткий адрес. А вот инициализация ножек мк для линий адреса -это уже другое дело. Если таковые не используются конечным устройством - то их можно и даже нужно занять другой полезной функцией, не связанной с EMC.
Всё остальное как выше по тексту.
27 дней прошло, обычно на решение подобной проблемы отводится один вечер.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 26th March 2017 - 09:16
Рейтинг@Mail.ru


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