|
NXP ARM7 не прописывается последняя запись в Local SRAM |
|
|
|
Oct 24 2015, 16:15
|

Гуру
     
Группа: Свой
Сообщений: 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 Других под рукой не оказалось. Но и с этим понятно, что шляпа  Повторная запись помогает, как и запись еще куда нибудь. На LPC для входа в загрузчик отродясь использовал прямой переход по адресу, и писал не в память а в scratch регистр UART.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 26 2015, 11:51
|
.
     
Группа: Участник
Сообщений: 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
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Oct 26 2015, 12:21
|
Профессионал
    
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Oct 26 2015, 17:38
|

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

|
QUOTE (ViKo @ Oct 26 2015, 20:27)  Это не кэш, а какой-то косяк разработчиков. Надо было принимать в буфер и тут же записывать в память. И не косяк. Они прияли такое решение и даже, как оказалось, документировали. Хотя, конечно, этому абзацу больше пригодно место в errata, как описание неявных особенностей поведения контролера памяти и способа обхода. В общем случае такое поведение (задержка записи в собственно память на такт записи к памяти) совершенно безобидно.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 26 2015, 18:05
|

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

|
QUOTE (ViKo @ Oct 26 2015, 20:53)  Я с LPC не знаком, просто заинтересовался. NXP один из самых по максмуму использующих ARM-овские ядра для всего и вся. Не помню уже за давностью лет, но скорее всего там SRAM тоже от ARM и этот эффект соответственно не только у LPC. QUOTE Из приведенной выдержки из руководства не следует, что там задержка на такт. Там задержка на целую запись.  Задержка на такт записи - цикл записи.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|