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

 
 
> Запись во внутреннюю flash ADuC7060
Croman13n3c
сообщение May 4 2011, 00:13
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 1-02-11
Пользователь №: 62 630



Пытаюсь записать во flash контроллера

Код
void Write2Flash (void)
{
unsigned short i=0;
unsigned short *tempd= (unsigned short*)&uCalibrate; //указатель на структуру данных
unsigned short data;
unsigned short     AppStartAddr =0x7400; //адресс начала данных во flash


for(i = AppStartAddr; i < 0x7800; i += 0x200)   //очистим 2 блока по 512 байт
    {
    FEEMOD =0x0108;//разрешить запись
    FEEADR = AppStartAddr;                 // set data address
    FEECON = 0x05;                         // erase page command
    while (!(FEESTA & 0x03)){ }
    }

for(i=0;i<(sizeof(struct CalibrateStruct));i+=2)
            {
            data = (*(tempd+i));
             FEEMOD = 0x0108;                     //разрешить запись
            FEEADR = AppStartAddr;        // set data address
            FEEDAT = data;                // set data value (16 bit register)
            FEECON = 0x02;            // single Write command
            while (!(FEESTA&0x03)){ }
                
            AppStartAddr += 1;                
            }
}


И считать при старте:

Код
void ReadFlash (void)
{

unsigned short i=0;
unsigned short *tempd= (unsigned short*)&uCalibrate;
unsigned short     AppStartAddr =0x7400;

for(i=0;i<(sizeof(struct CalibrateStruct));i+=2)
            {
                FEEMOD = 0x0100;
                FEEADR = AppStartAddr;  
                FEECON = 0x01;              //Single Read
                *(tempd+i)=FEEDAT;
                 AppStartAddr += 2;                                
            }

}


В результате имеем чистую структуру (что совсем не то, что ожидалось), или считаны/записаны (проверить не могу из-за отсутствия jtag ) только первые 2 байта.

Собственно вопрос - как писать и читать с флэша ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
AHTOXA
сообщение May 4 2011, 09:51
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Croman13n3c @ May 4 2011, 06:13) *
Собственно вопрос - как писать и читать с флэша ?

Читать - совсем просто:

uCalibrate = *(struct CalibrateStruct*)AppStartAddr;

Ну или memcpy().

А насчёт записи - во-первых, вы стираете только первую страницу:
CODE
for(i = AppStartAddr; i < 0x7800; i += 0x200) //очистим 2 блока по 512 байт
{
FEEMOD =0x0108;//разрешить запись
FEEADR = AppStartAddri; // set data address

и во-вторых, при записи наращиваете адрес побайтно:
Код
            AppStartAddr += 1;

, а надо по полслова.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Croman13n3c
сообщение May 4 2011, 13:45
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 1-02-11
Пользователь №: 62 630



Эти ошибки исправил, спасибо.

Но результат тотже, считываются 2 байта.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 4 2011, 16:35
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Вот мой рабочий вариант: Прикрепленный файл  flash.zip ( 959 байт ) Кол-во скачиваний: 124


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Croman13n3c
сообщение May 4 2011, 18:17
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 1-02-11
Пользователь №: 62 630



Спасибо большое, теперь всё работает.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 19:12
Рейтинг@Mail.ru


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