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

 
 
> 8051Fxxx from SiLabs, Кто как сохраняет настройки
viael
сообщение Aug 13 2006, 17:00
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979



Кто как сохраняет пользовательские настойки в разрабатываемых девайсах, а то SiLabs пожадничали прикрутить EEPROM к ихним камням.Я просто поражен cranky.gif неужели это так сложно было.
Так что остается 2 варианта, писать во флэш, или наружи епром цеплять.
Как лучше получается(из соображения размера кода)?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
RedFroggy
сообщение Aug 14 2006, 11:20
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 36
Регистрация: 7-11-05
Пользователь №: 10 549



Я во внутреннюю flash контроллера пишу. Функция записи небольшая получается, да и быстродействие несоизмеримо по сравнению с вариантом EEPROMа.
Go to the top of the page
 
+Quote Post
viael
сообщение Aug 15 2006, 15:05
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979



Цитата(RedFroggy @ Aug 14 2006, 15:20) *
Я во внутреннюю flash контроллера пишу. Функция записи небольшая получается, да и быстродействие несоизмеримо по сравнению с вариантом EEPROMа.


Я так понимаю надо работать с целым сектором даже если надо записать 1 байт?
Go to the top of the page
 
+Quote Post
RedFroggy
сообщение Aug 15 2006, 15:30
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 36
Регистрация: 7-11-05
Пользователь №: 10 549



Цитата(viael @ Aug 15 2006, 19:05) *
Цитата(RedFroggy @ Aug 14 2006, 15:20) *

Я во внутреннюю flash контроллера пишу. Функция записи небольшая получается, да и быстродействие несоизмеримо по сравнению с вариантом EEPROMа.


Я так понимаю надо работать с целым сектором даже если надо записать 1 байт?

Да, с целым сектором 512 байт. Поэтому перед записью даже одного байта, придётся все полезные данные сохранить в буфер, т.к. операции записи предшествует операция стирания.
Go to the top of the page
 
+Quote Post
viael
сообщение Aug 15 2006, 16:27
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979



[quote name='RedFroggy' date='Aug 15 2006, 19:30' post='144734']
[quote name='viael' post='144726' date='Aug 15 2006, 19:05']
[quote name='RedFroggy' post='144279' date='Aug 14 2006, 15:20']
Я во внутреннюю flash контроллера пишу. Функция записи небольшая получается, да и быстродействие несоизмеримо по сравнению с вариантом EEPROMа.
[/quote]

Я так понимаю надо работать с целым сектором даже если надо записать 1 байт?
[/quote]
Да, с целым сектором 512 байт. Поэтому перед записью даже одного байта, придётся все полезные данные сохранить в буфер, т.к. операции записи предшествует операция стирания.
[/7quote]
Явно не подходит для кристалов с RAM<768 байт. sad.gif
Go to the top of the page
 
+Quote Post
RedFroggy
сообщение Aug 15 2006, 16:57
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 36
Регистрация: 7-11-05
Пользователь №: 10 549



[quote name='viael' date='Aug 15 2006, 20:27' post='144745']
[quote name='RedFroggy' date='Aug 15 2006, 19:30' post='144734']
[quote name='viael' post='144726' date='Aug 15 2006, 19:05']
[quote name='RedFroggy' post='144279' date='Aug 14 2006, 15:20']
Я во внутреннюю flash контроллера пишу. Функция записи небольшая получается, да и быстродействие несоизмеримо по сравнению с вариантом EEPROMа.
[/quote]

Я так понимаю надо работать с целым сектором даже если надо записать 1 байт?
[/quote]
Да, с целым сектором 512 байт. Поэтому перед записью даже одного байта, придётся все полезные данные сохранить в буфер, т.к. операции записи предшествует операция стирания.
[/7quote]
Явно не подходит для кристалов с RAM<768 байт. sad.gif
[/quote]
Почему не подходит? Никто ведь не заставляет запоминать состояние всех 512 байт. Если у Вас, скажем, 10 байт настроек, так и сохраняйте в буфер эти 10 байт. А потом после стирания их восстанавливайте во флеш.
Go to the top of the page
 
+Quote Post
viael
сообщение Aug 15 2006, 17:49
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979



Цитата
Почему не подходит? Никто ведь не заставляет запоминать состояние всех 512 байт. Если у Вас, скажем, 10 байт настроек, так и сохраняйте в буфер эти 10 байт. А потом после стирания их восстанавливайте во флеш.



А у вас есть пример реализации на кейле.Этож надо сразу забить блок флеша размером 512 шоб компилятор его не заюзал.
Go to the top of the page
 
+Quote Post
RedFroggy
сообщение Aug 15 2006, 18:51
Сообщение #8


Участник
*

Группа: Свой
Сообщений: 36
Регистрация: 7-11-05
Пользователь №: 10 549



Цитата(viael @ Aug 15 2006, 21:49) *
Цитата

Почему не подходит? Никто ведь не заставляет запоминать состояние всех 512 байт. Если у Вас, скажем, 10 байт настроек, так и сохраняйте в буфер эти 10 байт. А потом после стирания их восстанавливайте во флеш.



А у вас есть пример реализации на кейле.Этож надо сразу забить блок флеша размером 512 шоб компилятор его не заюзал.

Завтра вышлю пример
Go to the top of the page
 
+Quote Post
viael
сообщение Aug 15 2006, 21:21
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979



Цитата(RedFroggy @ Aug 15 2006, 22:51) *
Цитата(viael @ Aug 15 2006, 21:49) *

Цитата

Почему не подходит? Никто ведь не заставляет запоминать состояние всех 512 байт. Если у Вас, скажем, 10 байт настроек, так и сохраняйте в буфер эти 10 байт. А потом после стирания их восстанавливайте во флеш.



А у вас есть пример реализации на кейле.Этож надо сразу забить блок флеша размером 512 шоб компилятор его не заюзал.

Завтра вышлю пример

Я уже сам допер biggrin.gif
Поковырялся в апликухах и написал это:
Код
   void write_flash( unsigned char dat,unsigned char xdata *ptr )
  {
   unsigned char xdata *pwrite;
   char EA_save,PCA0MD_save;

     // Disable Watchdog timer
   PCA0MD_save=PCA0MD;
   PCA0MD &= ~0x40;                    // WDTE = 0 (clear watchdog timer
                                       // enable)

   // erase the FLASH page at 0x1000
   EA_save = EA;
   EA = 0;                             // disable interrupts (precautionary)

   // initialize write/erase pointer
   pwrite = ptr;
   PSCTL = 0x03;                       // MOVX writes erase FLASH page

   FLKEY = 0xA5;                       // FLASH lock and key sequence 1
   FLKEY = 0xF1;                       // FLASH lock and key sequence 2
   *pwrite = 0;                        // initiate page erase

   PSCTL = 0;                          // MOVX writes target XRAM

   // copy a dat FLASH memory at address ptr

   pwrite = ptr;                    // initialize FLASH write pointer
   PSCTL = 0x01;                    // MOVX writes target FLASH memory

   FLKEY = 0xA5;                    // FLASH lock and key sequence 1
   FLKEY = 0xF1;                    // FLASH lock and key sequence 2
   *pwrite = dat;                   // copy byte

   PSCTL = 0x00;                    // MOVX writes target XRAM
   EA = EA_save;                    // re-enable interrupts
   PCA0MD=PCA0MD_save;
  }


записывается dat по указателю ptr с предварительным стиранием блока начиная с ptr.Проверил в железе на F321 работает.
Но примерчик все рано вышли интересно как у тебя реализовано.
Go to the top of the page
 
+Quote Post
RedFroggy
сообщение Aug 16 2006, 06:00
Сообщение #10


Участник
*

Группа: Свой
Сообщений: 36
Регистрация: 7-11-05
Пользователь №: 10 549



Цитата(viael @ Aug 16 2006, 01:21) *
Цитата(RedFroggy @ Aug 15 2006, 22:51) *

Цитата(viael @ Aug 15 2006, 21:49) *

Цитата

Почему не подходит? Никто ведь не заставляет запоминать состояние всех 512 байт. Если у Вас, скажем, 10 байт настроек, так и сохраняйте в буфер эти 10 байт. А потом после стирания их восстанавливайте во флеш.



А у вас есть пример реализации на кейле.Этож надо сразу забить блок флеша размером 512 шоб компилятор его не заюзал.

Завтра вышлю пример

Я уже сам допер biggrin.gif
Поковырялся в апликухах и написал это:
Код
   void write_flash( unsigned char dat,unsigned char xdata *ptr )
  {
   unsigned char xdata *pwrite;
   char EA_save,PCA0MD_save;

     // Disable Watchdog timer
   PCA0MD_save=PCA0MD;
   PCA0MD &= ~0x40;                    // WDTE = 0 (clear watchdog timer
                                       // enable)

   // erase the FLASH page at 0x1000
   EA_save = EA;
   EA = 0;                             // disable interrupts (precautionary)

   // initialize write/erase pointer
   pwrite = ptr;
   PSCTL = 0x03;                       // MOVX writes erase FLASH page

   FLKEY = 0xA5;                       // FLASH lock and key sequence 1
   FLKEY = 0xF1;                       // FLASH lock and key sequence 2
   *pwrite = 0;                        // initiate page erase

   PSCTL = 0;                          // MOVX writes target XRAM

   // copy a dat FLASH memory at address ptr

   pwrite = ptr;                    // initialize FLASH write pointer
   PSCTL = 0x01;                    // MOVX writes target FLASH memory

   FLKEY = 0xA5;                    // FLASH lock and key sequence 1
   FLKEY = 0xF1;                    // FLASH lock and key sequence 2
   *pwrite = dat;                   // copy byte

   PSCTL = 0x00;                    // MOVX writes target XRAM
   EA = EA_save;                    // re-enable interrupts
   PCA0MD=PCA0MD_save;
  }


записывается dat по указателю ptr с предварительным стиранием блока начиная с ptr.Проверил в железе на F321 работает.
Но примерчик все рано вышли интересно как у тебя реализовано.


Например, так
Код
#define InternalFLASHAddress 0x7A00    // Адрес начала области для хранения параметров
#define SYSTEM_PARAMETERS_SIZE 190     // Размер области для хранения системных параметров

xdata unsigned char InternalBuffer[SYSTEM_PARAMETERS_SIZE]; //Внутренний буфер для параметров

void WriteToInternalFlash(unsigned char *ptr)
{
    unsigned char xdata *FlashPointToWrite;     //Указатель на 512-байтную область памяти
    idata unsigned char index;
    FlashPointToWrite = InternalFLASHAddress;
    
    FLSCL = 0x88;                         // set FLASH scale register for 12000000Hz system clock
    PSCTL = 0x03;                         // set PSWE and PSEE to ‘1’s (MOVX instructions erase the corresponding FLASH page)
    *FlashPointToWrite = 0;                     // initiate the erase cycle
    PSCTL = 0x01;                         // clear PSEE, leaving PSWE set to ‘1’. MOVX instructions will write to the corresponding FLASH address.
    for (index=0;index<SYSTEM_PARAMETERS_SIZE;index++)
       *(FlashPointToWrite++) = *(ptr+index);
    PSCTL = 0;                                     
    FLSCL = 0x8f;                                     
    return;
}

void main(void)
{
// .....
    WriteToInternalFlash(&InternalBuffer[0]);
// ....
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- viael   8051Fxxx from SiLabs   Aug 13 2006, 17:00
- - Igor_K   Делаю так же, в scratchpad пишу. Недостаток вижу т...   Aug 14 2006, 15:00
- - Igor_K   Не обязательно работать с такими большими секторам...   Aug 16 2006, 15:44
|- - RedFroggy   Цитата(Igor_K @ Aug 16 2006, 19:44) Не об...   Aug 16 2006, 16:50
|- - viael   Цитата(RedFroggy @ Aug 16 2006, 20:50) Ци...   Aug 17 2006, 07:31
|- - RedFroggy   Цитата(viael @ Aug 17 2006, 11:31) Цитата...   Aug 17 2006, 07:58
- - _Andu_   мы в своих устройствах используем внешнюю флаш. С ...   Aug 17 2006, 12:09
|- - nik_al   Цитата(_Andu_ @ Aug 17 2006, 16:09) С точ...   Sep 2 2006, 19:39
- - evg123   Варианотов нет - или работать с внутренним флэшом ...   Sep 13 2006, 12:10
|- - RedFroggy   Цитата(evg123 @ Sep 13 2006, 16:10) Вариа...   Sep 13 2006, 12:32
- - evg123   Использовать флэш. Если настроек мало, то можно по...   Sep 13 2006, 12:42
- - AndreyS   День добрый А чем плох Даллосовский термодатчик с...   Sep 14 2006, 13:33


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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 05:05
Рейтинг@Mail.ru


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