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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> NXP ARM7 не прописывается последняя запись в Local SRAM
GetSmart
сообщение Oct 24 2015, 08:34
Сообщение #1


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



При отладке обнаружил, что последняя запись из команд STR/STM в Local SRAM [0x40000000..0x4000xxxx] не доходит до SRAM. Вероятно все записи (через Internal SRAM Controller) буферизуются и если поступает сигнал Reset, то последняя запись не пропишется при любом ожидании, даже если прочитать из этого же (последнего) адреса. Проблема актуальна только для устройств, при сбросе сохраняющих в памяти какие-то переменные. Проверял на LPC213x и LPC214x. Т.к. не имею ARM7 с DMA, например LPC24xx, то не могу проверить тот же эффект в DMA SRAM. Но эта память работает не через Internal SRAM Controller.

Если где-то описана эта фича срам-контроллера, то кто-нибудь подскажите где.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
smalcom
сообщение Oct 24 2015, 09:08
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



http://electronix.ru/forum/index.php?showtopic=131171
то же?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 24 2015, 09:43
Сообщение #3


Гуру
******

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



Думаю, что сегодя-завтра смогу проэспериментировать на LPC2148, LPC2103 и на LPC2368.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 24 2015, 16:15
Сообщение #4


Гуру
******

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



Эксперимент провел. Вот такой:
QUOTE
__no_init volatile unsigned long check_wr_value;

void check_wr(void)
{
__disable_interrupt();
check_wr_value = 0xCAFEBABE;
check_wr_value = 0xDEADBEEF;
// Watcdog Reset
WDFEED = 0xA5;
}

На двух контроллерах.
На LPC2367 результат правильный:
DEEADBEEF

На LPC2148 дурдом:
CAFEBABE

Других под рукой не оказалось. Но и с этим понятно, что шляпа sad.gif

Повторная запись помогает, как и запись еще куда нибудь.

На LPC для входа в загрузчик отродясь использовал прямой переход по адресу, и писал не в память а в scratch регистр UART.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Alechek
сообщение Oct 26 2015, 07:34
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Ничего странного. Кэширование записи.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 26 2015, 08:37
Сообщение #6


Гуру
******

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



QUOTE (Alechek @ Oct 26 2015, 10:34) *
Ничего странного. Кэширование записи.

Вы открыли всем нам глаза! А как только быть с тем фактом, что кэша у LPC2148 нет, не было и не будет?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 26 2015, 11:51
Сообщение #7


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo @ Oct 24 2015, 20:15) *
Эксперимент провел. Вот такой:

На 2148 проверить надо аналогичную запись в регион USB DMA SRAM.

Цитата
check_wr_value = 0xDEADBEEF;

Напоминает пароль CODE0001 в IOHandler-e.

Сообщение отредактировал GetSmart - Oct 26 2015, 12:51


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Alechek
сообщение Oct 26 2015, 12:21
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(zltigo @ Oct 26 2015, 13:37) *
Вы открыли всем нам глаза! А как только быть с тем фактом, что кэша у LPC2148 нет, не было и не будет?

Ага, не было... Было есть и будет!
Цитата("Philips Semiconductors UM10139")
8. On-chip Static RAM (SRAM)
The SRAM controller incorporates a write-back buffer in order to prevent CPU stalls
during back-to-back writes. The write-back buffer always holds the last data sent by
software to the SRAM. This data is only written to the SRAM when another write is
requested by software (the data is only written to the SRAM when software does another
write). If a chip reset occurs, actual SRAM contents will not reflect the most recent write
request (i.e. after a "warm" chip reset, the SRAM does not reflect the last write operation).
Any software that checks SRAM contents after reset must take this into account. Two
identical writes to a location guarantee that the data will be present after a Reset.
Alternatively, a dummy write operation before entering idle or power-down mode will
similarly guarantee that the last data written will be present in SRAM after a subsequent
Reset.
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 26 2015, 12:26
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Alechek @ Oct 26 2015, 15:21) *
Ага, не было... Было есть и будет!

Забавно. Народ увлёкся экспериментами и забыл почитать мануал. Целую бурю в стакане устроили biggrin.gif
Кстати, сейчас вам расскажут, что это вовсе не кэш. Ну и так далее laughing.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 26 2015, 13:33
Сообщение #10


Гуру
******

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



Цитата(scifi @ Oct 26 2015, 15:26) *
Народ увлёкся экспериментами и забыл почитать мануал.

Вот только в мануале на 2478 буфер не упоминается.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 26 2015, 16:33
Сообщение #11


Гуру
******

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



QUOTE (Alechek @ Oct 26 2015, 15:21) *
Ага, не было... Было есть и будет!

Здорово! Хорошая все объясняющая цитата. Только ведь, это действительно не кэш sm.gif. Хотя бы по той причне, что авторы этого решения НЕ назвали это кэшем.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 26 2015, 17:27
Сообщение #12


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(zltigo @ Oct 26 2015, 19:33) *
Только ведь, это действительно не кэш sm.gif.

Это не кэш, а какой-то косяк разработчиков. Надо было принимать в буфер и тут же записывать в память.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 26 2015, 17:38
Сообщение #13


Гуру
******

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



QUOTE (ViKo @ Oct 26 2015, 20:27) *
Это не кэш, а какой-то косяк разработчиков. Надо было принимать в буфер и тут же записывать в память.

И не косяк. Они прияли такое решение и даже, как оказалось, документировали. Хотя, конечно, этому абзацу больше пригодно место в errata, как описание неявных особенностей поведения контролера памяти и способа обхода. В общем случае такое поведение (задержка записи в собственно память на такт записи к памяти) совершенно безобидно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 26 2015, 17:53
Сообщение #14


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(zltigo @ Oct 26 2015, 20:38) *
В общем случае такое поведение (задержка записи в собственно память на такт записи к памяти) совершенно безобидно.

Я с LPC не знаком, просто заинтересовался. Из приведенной выдержки из руководства не следует, что там задержка на такт. Там задержка на целую запись. rolleyes.gif
Иначе можно было барьером обойтись.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 26 2015, 18:05
Сообщение #15


Гуру
******

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



QUOTE (ViKo @ Oct 26 2015, 20:53) *
Я с LPC не знаком, просто заинтересовался.

NXP один из самых по максмуму использующих ARM-овские ядра для всего и вся. Не помню уже за давностью лет, но скорее всего там SRAM тоже от ARM и этот эффект соответственно не только у LPC.
QUOTE
Из приведенной выдержки из руководства не следует, что там задержка на такт. Там задержка на целую запись. rolleyes.gif

Задержка на такт записи - цикл записи.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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