|
|
  |
Эмуляция EEPROM STM32 (an2594) кто пользовался? Подключил, компилируется, подскажите как писать/читать теперь? |
|
|
|
Apr 7 2012, 21:34
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(smk @ Apr 7 2012, 16:47)  Ходил уже. Находится либо программный код либо нули. Значит плохо искали. Или запись в флэш всё-таки не симулируется. Цитата(smk @ Apr 7 2012, 16:47)  А как Вы делаете чтение/запись и резервируете место под эмуляцию? Чтение флэш тривиально. Запись - в соответствии с документом от ST под названием "Programming Manual". Там описаны регистры флэш и процедуры стирания и записи. Резервирование тоже тривиально: в настройках линкера делаем так, чтобы код программы не размещался в двух секторах. Эти секторы и используем для эмуляции EEPROM.
|
|
|
|
|
Apr 8 2012, 05:19
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Подскажите, в каком именно месте настроек линкера что нужно поменять чтобы сектора были пусты? У меня целевой контроллер с 256 кбайт, а памяти нужно выделить около 20 кбайт. Это как-то возможно? Может сначала объявить массив, посмотреть куда ляжет, а потом уже обвесить чтением/записью? Цитата(scifi @ Apr 8 2012, 00:34)  Чтение флэш тривиально. Цитата unsigned int *ip; unsigned int a, b, c;
*ip = 0x08000000; a=*ip; Тривиально это так ?
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
Apr 8 2012, 18:43
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(smk @ Apr 8 2012, 09:19)  Подскажите, в каком именно месте настроек линкера что нужно поменять чтобы сектора были пусты? Зависит от линкера (яр, кейл или что-то ещё). См. мануал, нет желания его для вас толковать. Цитата(smk @ Apr 8 2012, 09:19)  Тривиально это так ? Рядом с вашим ником стоит надпись "профессионал" и 1400 сообщений. Но вопрос откровенно начинающий. Я в непонятках. Тривиально - это так: Код unsigned int *ip; unsigned int a, b, c;
ip = (unsigned int*)0x08000000; a=*ip;
|
|
|
|
|
Apr 12 2012, 08:40
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Как выяснилось, Keil действительно не показывает в симуляторе запись во flash. Уж не знаю почему они так сделали, но собственно сам программный код видно, а записанное из программы нет. И при попытке чтения из программы (в симуляторе) тоже имеем нули, каковые и отображаются симулятором по соответствующим адресам. В железе же работает и чтение и запись. Привожу код, может кому сэкономлю пару минут... CODE unsigned int Read32FromFlash (unsigned int address) { unsigned int *ip; unsigned int a; ip = (unsigned int*)address; a=*ip; return a; }
void FLASH32_Unlock(void) { FLASH->KEYR = ((uint32_t)0x45670123); FLASH->KEYR = ((uint32_t)0xCDEF89AB); }
void FLASH32_Lock(void) { FLASH->CR |= FLASH_CR_LOCK; }
void FLASH_Program32Word(unsigned int Address, unsigned int Data) { __IO uint32_t tmp = 0; while ((FLASH->SR & FLASH_SR_BSY) != 0 ); FLASH->CR |= FLASH_CR_PG; /* Programm the flash */ //FLASH->CR |= (0x00000001); *(__IO uint16_t*)Address = (uint16_t)Data; while ((FLASH->SR & FLASH_SR_BSY) != 0 ); tmp = Address + 2; *(__IO uint16_t*) tmp = Data >> 16; while ((FLASH->SR & FLASH_SR_BSY) != 0 ); FLASH->CR &= ~FLASH_CR_PG; }
Сообщение отредактировал IgorKossak - Apr 19 2012, 08:14
Причина редактирования: [codebox]
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
Apr 19 2012, 06:39
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Цитата(toweroff @ Apr 18 2012, 22:53)  ой а чего бы структуру со всеми данными не описать и потом спокойно по ее размеру записывать? не STM, а LPC пользуюсь, там чуть геморройнее, но тем не менее Да без проблем. Дело вкуса. Там другое важно, а именно то, что для того чтобы перезаписать 1 байт стирать прийдется всю страницу, а єто 1 кбай или 2.
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|