День добрый товарищи!
До этого не доводилось сталкиваться с ARM от Atmel. Но вот жизнь нас свела...
Подскажите, пожалуйста, что за секцию памяти атмеловские инженеры обозначили как User page в окне программирования? Даташит ничего аналогичного не содержит. Подозреваю, что это часть NVM памяти, которая как-то по другому обозначена в даташите. Ткните носом, пожалуйста.
Секция User page на SAMR21 от Atmel
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Секция User page на SAMR21 от Atmel
- Вложения
-
- user_page.png
- (58.49 КБ) 432 скачивания
- Реклама
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Секция User page на SAMR21 от Atmel
Я слегка погуглил и нашел вот такое, на первый попавшийся контроллер ATmel
Оно?Страница пользователя (User Page) —
специальная область для хранения дан-
ных пользователя размером 256 байт, на-
ходящаяся во Flash-памяти. Эта область
не стирается командой chip erase; запись
и стирание User Page осуществляется спе-
циальным набором команд. Доступ для
чтения страницы осуществляется таким же
образом, как и для всей Flash-памяти. User
Page идеально подходит для хранения
данных калибровки, серийных номеров,
MAC-адресов и т.д., то есть данных, кото-
рые необходимо сохранять в течение всей
жизни устройства
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: Секция User page на SAMR21 от Atmel
Да, она. Собственно для хранения mac-адреса я и планирую ее использовать.
Только хрен его знает пока как она называется в даташите. Сами понимаете, что для ее чтения мне нужен адрес начала этой страницы. А с этим пока у меня затык.
Только хрен его знает пока как она называется в даташите. Сами понимаете, что для ее чтения мне нужен адрес начала этой страницы. А с этим пока у меня затык.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Секция User page на SAMR21 от Atmel
Ну наверное так и называется. Что, в даташит карты памяти нет что-ли?
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: Секция User page на SAMR21 от Atmel
Полная карта кристалла есть. Логично, что user page будет внутри Internal Flash. А вот карты флеша хоть ты тресни не могу найти.
Есть у меня подозрение, что User page в даташите называется User row и тогда вот эта строка дает на все ответы:
Есть у меня подозрение, что User page в даташите называется User row и тогда вот эта строка дает на все ответы:
В любом случае нужно пробовать читать. Секция сначала считывается программатором, а затем и из программы. Данные должны совпасть. Буду пробовать.The NVM User Row can be read at address 0x804000.
- Вложения
-
- memory_map.PNG
- (123.78 КБ) 403 скачивания
- Реклама
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Секция User page на SAMR21 от Atmel
А Вы попробуйте заполнить все 64 байта тестовыми данными , типа 0x55. Ну чтобы не 0 и не FF. А потом очистить камень. Вроде как эта память не должна стираться.
----
Поглядел даташит на некий другой камень, удалил уже и забыл какой
. Там эта область так и называется User Page, но МК то не тот , хоть и атмел.
----
Поглядел даташит на некий другой камень, удалил уже и забыл какой
Спойлер

- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: Секция User page на SAMR21 от Atmel
Память не стирается. Это я уже проверил давно)
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: Секция User page на SAMR21 от Atmel
Да, адрес оказался верным. Проверил очень просто: считываем в файл данные и смотрим адрес с которого начинается файл.
Может быть кому-то пригодится:
Может быть кому-то пригодится:
Спойлер
Код: Выделить всё
static uint8_t mac_buffer[64];
static void NVM_config(void)
{
// Turn on the digital interface clock
PM->APBBMASK.reg |= PM_APBBMASK_NVMCTRL;
// Clear error flags
NVMCTRL->STATUS.reg |= NVMCTRL_STATUS_MASK;
// Writing configuration to the CTRLB register
NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_SLEEPPRM(NVM_SLEEP_POWER_MODE_WAKEONACCESS) | \
((true & 0x01) << NVMCTRL_CTRLB_MANW_Pos) | NVMCTRL_CTRLB_RWS(NVMCTRL->CTRLB.bit.RWS) \
| ((false & 0x01) << NVMCTRL_CTRLB_CACHEDIS_Pos) \
| NVMCTRL_CTRLB_READMODE(NVM_CACHE_READMODE_NO_MISS_PENALTY);
}
static void NVM_read_buffer(uint32_t source_address, uint8_t *buffer, uint8_t length)
{
NVMCTRL->STATUS.reg |= NVMCTRL_STATUS_MASK; // Clear error flags
uint32_t page_address = source_address / 2;
// NVM _must_ be accessed as a series of 16-bit words, perform manual copy to ensure alignment
for (uint16_t i = 0; i < length; i += 2)
{
// Fetch next 16-bit chunk from the NVM memory space
uint16_t data = ((volatile uint16_t *)FLASH_ADDR)[page_address++];
// Copy first byte of the 16-bit chunk to the destination buffer
buffer[i] = (data & 0xFF);
// If we are not at the end of a read request with an odd byte count, store the next byte of data as well
if (i < (length - 1))
buffer[i + 1] = (data >> 8);
}
}
int main (void)
{
system_init();
NVM_config();
memset(&mac_buffer, 0, 64);
NVM_read_buffer(NVMCTRL_AUX0_ADDRESS, &mac_buffer[0], 8);
while (1)
{
asm volatile("nop"::);
}
}



