Секция User page на SAMR21 от Atmel

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Секция User page на SAMR21 от Atmel

Сообщение eess9 »

День добрый товарищи!
До этого не доводилось сталкиваться с ARM от Atmel. Но вот жизнь нас свела...
Подскажите, пожалуйста, что за секцию памяти атмеловские инженеры обозначили как User page в окне программирования? Даташит ничего аналогичного не содержит. Подозреваю, что это часть NVM памяти, которая как-то по другому обозначена в даташите. Ткните носом, пожалуйста.
Вложения
user_page.png
(58.49 КБ) 432 скачивания
Реклама
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Секция User page на SAMR21 от Atmel

Сообщение Z_h_e »

Я слегка погуглил и нашел вот такое, на первый попавшийся контроллер 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

Сообщение eess9 »

Да, она. Собственно для хранения mac-адреса я и планирую ее использовать.
Только хрен его знает пока как она называется в даташите. Сами понимаете, что для ее чтения мне нужен адрес начала этой страницы. А с этим пока у меня затык.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Секция User page на SAMR21 от Atmel

Сообщение Z_h_e »

Ну наверное так и называется. Что, в даташит карты памяти нет что-ли?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Re: Секция User page на SAMR21 от Atmel

Сообщение eess9 »

Полная карта кристалла есть. Логично, что user page будет внутри Internal Flash. А вот карты флеша хоть ты тресни не могу найти.
Есть у меня подозрение, что 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

Сообщение Z_h_e »

А Вы попробуйте заполнить все 64 байта тестовыми данными , типа 0x55. Ну чтобы не 0 и не FF. А потом очистить камень. Вроде как эта память не должна стираться.
----
Поглядел даташит на некий другой камень, удалил уже и забыл какой :). Там эта область так и называется User Page, но МК то не тот , хоть и атмел.
СпойлерИзображение
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Re: Секция User page на SAMR21 от Atmel

Сообщение eess9 »

Память не стирается. Это я уже проверил давно)
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Re: Секция User page на SAMR21 от Atmel

Сообщение eess9 »

Да, адрес оказался верным. Проверил очень просто: считываем в файл данные и смотрим адрес с которого начинается файл.
Может быть кому-то пригодится:
Спойлер

Код: Выделить всё

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"::);
	}
}
Ответить

Вернуться в «ARM»