JohnKorsh 1 7 декабря, 2017 Опубликовано 7 декабря, 2017 · Жалоба Добрый день! Не подскажет ли кто причины следующего явления. Работаю с MSP430F5528. IAR, MSP-FET430UIF. Режим Debug. При записи в информационный сегмент D записанные данные во Flash читаются только в текущем сеансе отладки. Если выйти из режима отладки и снова войти, то читаются 0xFFFFFFFF – то есть сегмент стирается. При записи в сегмент A всё как и положено – после снятия и включения питания читается то, что записал. Привожу тестовые исходники для сегмента A с учётом его персонального LOCKA, хотя это копия примера. // // Write of the long word to the EEPROM. //***************************************************************** // void Write_Dayb (void) { unsigned long *Flash_ptrD = NULL; // Initialize Flash pointer Seg A. //--------------------------------------------------------------------------- Flash_ptrD = (unsigned long *) 0x1980; // Set of the segment A. // Write of the long words to the segment A. WDTCTL = WDTPW + WDTHOLD; // Stop of the WDT. asm ("DINT"); // Disable of the interrupts. // while ((FCTL3 & BUSY) == BUSY) { } // FCTL3 = FWKEY; // Clear Lock bit. FCTL3 = FWKEY + LOCKA; // Unlock of the A segment. if ((FCTL3 & LOCKA) == LOCKA) { FCTL3 = FWKEY + LOCKA; // Unlock of the A segment. } FCTL1 = FWKEY + ERASE; // Set of the segment Erase bit. *Flash_ptrD = 0; // Dummy write to erase Flash seg. while ((FCTL3 & BUSY) == BUSY) { } // FCTL1 = FWKEY + BLKWRT; // Enable long-word write. *Flash_ptrD = 0x12345678; // Write to Flash. while ((FCTL3 & BUSY) == BUSY) { } FCTL1 = FWKEY; // Clear WRT bit. FCTL3 = FWKEY + LOCK + LOCKA; // Set LOCK bits. if ((FCTL3 & LOCKA) != LOCKA) { FCTL3 = FWKEY + LOCK + LOCKA; // Set LOCK bits. } // asm ("EINT"); // Enable of the interrupts. Clr_WDT; // Start of the WDT. } // // Read of the daybook contents from the EEPROM. //***************************************************************** // void Read_Dayb (void) { unsigned long *Flash_ptrD = NULL; // Initialize Flash pointer Seg A. //--------------------------------------------------------------------------- Flash_ptrD = (unsigned long *) 0x1980; // Set of the segment A. Flash_Val = *Flash_ptrD; // (Flash_Val – global). } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 7 декабря, 2017 Опубликовано 7 декабря, 2017 · Жалоба Для начала проверьте опции проекта (дебаггер) Там есть режмиы "заливки", в том числе тереть все или только программную память. Скорее всего у Вас "трет все", соотв-но при каждой заливке сегменты содержат 0xFF. После этого имеет смысл анализировать Ваш код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnKorsh 1 8 декабря, 2017 Опубликовано 8 декабря, 2017 · Жалоба Спасибо. Вы правы, дело именно Erase main and information memory. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться