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

 
 
> Программирование сегмента данных F5xxx
varvar
сообщение Mar 24 2013, 08:22
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811



Не подскажете, в чем разница программирования сегментов данных F5xx и F1xx? В F1xx, как помнится, было ограничение по тактовой частоте и минимальному напряжению.
В F5xx таких ограничений не увидел, тем не менее код, по сути дела скопированный из примеров, ничего во флеш не записывает.
Частота 8 мгц (уменьшение до 1 не помогло), питание 3.3V.

Код
void BurnEeprom(void)
{
  char *Flash_ptrC;
  Flash_ptrC = (char *) 0x1880;             // Initialize info segment C ptr  
  __disable_interrupt();                    // 5xx Workaround: Disable global

  FCTL3 = FWKEY;                           // unlock info  
  FCTL1 = FWKEY+ERASE;                     // Set Erase bit  
  *Flash_ptrC = 0;                         // Dummy write to erase info seg С
  
// на всякий случай - 32ms
  for (volatile int i=0; i<10000; i++)
  {
    __no_operation();
    __no_operation();    
    __no_operation();        
  }
  
  FCTL1 = FWKEY+WRT;                       // Byte write
  for (int i=0; i<27; i++) *Flash_ptrC++ = EEPROM.RegMap[i];  
  FCTL1 = FWKEY;                            // Clear WRT bit
  FCTL3 = FWKEY+LOCK;                     //  lock info  

  __enable_interrupt();                    // 5xx Workaround
}


Где опять собака могла порыться?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
varvar
сообщение Mar 24 2013, 17:16
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811



Что-то потихоньку задышало - но истоки непонятны
Когда объявляешь данные
Код
#pragma dataseg = INFOC                         // Info Flash Memory Block c
const uint8 FlashArray[27]=
{
0x28, 0x96, 0xC8, 0x96, 0x68, 0x97,
0x88, 0x13, 0xC4, 0x09, 0x82, 0x06, 0xE2, 0x04,
0xE8, 0x03, 0x41, 0x03, 0xCA, 0x02, 0x71, 0x02,
0x03,
0x01,
10,
0x01,
0x01
};  
#pragma dataseg = default

в сегменте С ничего нет, все данные в А
А когда так:
Код
const uint8 FlashArray[27]@0x1880=
{
0x28, 0x96, 0xC8, 0x96, 0x68, 0x97,
0x88, 0x13, 0xC4, 0x09, 0x82, 0x06, 0xE2, 0x04,
0xE8, 0x03, 0x41, 0x03, 0xCA, 0x02, 0x71, 0x02,
0x03,
0x01,
10,
0x01,
0x01
};

в С данные появляются, но из А они никуда не деваются.
Похоже, в опциях ИАРа нужно какую-то галку поставить/убрать, остается выяснить какую.

А примеры у тексаса ключница писала - по крайней мере lockinfo никогда не разблокируются, хотя примеры явно к инфо сегментам относятся.
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 24 2013, 20:09
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(varvar @ Mar 24 2013, 22:16) *
А примеры у тексаса ключница писала - по крайней мере lockinfo никогда не разблокируются, хотя примеры явно к инфо сегментам относятся.

Бит LOCKA имеет особенность. Это toggle-bit. Он изменяет (на противоположное) свое состояние при записи в него 1. А при записи 0 не изменяет. См. описание в User's Manual.
Цитата
LOCKA Bit 6 Segment A lock. Write a 1 to this bit to change its state. Writing 0 has no effect.
0 Segment A of the information memory is unlocked and can be written or erased in segment
erase mode.
1 Segment A of the information memory is locked and can not be written or erased in segment
erase mode.

По этой причине у меня в тексте стоит проверка его (бита LOCKA) состояния для разблокирования сегмента INFO_A перед записью.
Go to the top of the page
 
+Quote Post



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

 


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


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