This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LP-MSPM0G3507:闪存读取错误

Guru**** 1831610 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1408177/lp-mspm0g3507-flash-memory-read-error

器件型号:LP-MSPM0G3507

工具与软件:

你好,我没有任何问题,而写入我的程序的假存储器。 但当我重置保存的数据时、无法读取它。 我在做什么错? 可以帮帮我吗?

#include "ti_msp_dl_config.h"

/* Address in main memory to write to */
#define MAIN_BASE_ADDRESS (0x00001000)

/* Counter variable to store the value in flash */
uint8_t counter = 0;
uint8_t counter_value;
uint8_t read_value=0x00;
uint8_t readed_value;

uint8_t error;
volatile DL_FLASHCTL_COMMAND_STATUS gCmdStatus;

/* Error codes */
#define NO_ERROR 0
#define ERROR_ERASE 1
#define ERROR_8BIT_W 2

volatile uint8_t gErrorType = NO_ERROR;

void writeValueToFlash(uint32_t address, uint8_t *value){

    DL_FlashCTL_unprotectSector(
        FLASHCTL, address, DL_FLASHCTL_REGION_SELECT_MAIN);
    DL_FlashCTL_eraseMemory(
        FLASHCTL, address, DL_FLASHCTL_COMMAND_SIZE_SECTOR);
         DL_FlashCTL_waitForCmdDone(FLASHCTL);
    DL_FlashCTL_unprotectSector(
        FLASHCTL, address, DL_FLASHCTL_REGION_SELECT_MAIN);
    DL_FlashCTL_programMemory8WithECCGenerated(
        FLASHCTL, address, value);

    counter_value=*value;

}


int main(void)
{
    SYSCFG_DL_init();

    DL_FlashCTL_unprotectSector(
            FLASHCTL, MAIN_BASE_ADDRESS, DL_FLASHCTL_REGION_SELECT_MAIN);


    DL_FlashCTL_readVerifyFromRAM8WithECCGenerated(FLASHCTL, MAIN_BASE_ADDRESS, &read_value);
    DL_FlashCTL_waitForCmdDone(FLASHCTL);



    while (1) {
        /* Increment the counter */

       writeValueToFlash(MAIN_BASE_ADDRESS,  &counter);
       counter++;

        delay_cycles(16000000);
    }
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您如何读取存储器?  您是否使用 IDE 直接读取闪存?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    uint8_t readFlashMemory8(uint32_t address) {
        uint8_t *ptr = (uint8_t *)address; // Adresi uint8_t türünde bir pointer'a dönüştür
        return *ptr; // Bu adresteki veriyi oku ve geri döndür
    }
    
    uint16_t readFlashMemory16(uint32_t address) {
        uint8_t lowByte = *((uint8_t *)address);
        uint8_t highByte = *((uint8_t *)(address + 1));
        return (highByte << 8) | lowByte;
    }

    我编写此文件仅供参考。 通过这些函数、我可以访问8位和16位值的地址​​并读取它们。