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.

[参考译文] TM4C129ENCPDT:写入 TM4C129ENCPDT 的闪存

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/574439/tm4c129encpdt-writing-flash-memory-of-tm4c129encpdt

器件型号:TM4C129ENCPDT

您好!

我尝试写入闪存、但没有成功。

有人能帮我解决问题吗?

谢谢、
格尔格利

我编写了以下代码:

#define FLASH_CONTING_BASE 0x400FD000

const unsigned int fma    = flash_control_BASE + 0x000;

const unsigned int FMD    = FLASH_CONTRAL_BASE + 0x004;

const unsigned int FMC    = FLASH_CONTRAL_BASE + 0x008;

const unsigned int FLLPEKEY = FLASH_CONTRAL_BASE + 0x03C;

const unsigned int BOOTCFG = FLASH_CONTING_BASE + 0x1D0;

 

//将掩码中定义的位设置为*dst 中的*src

void memcpy1 (void* dst、const void* src、size_t len、unsigned int mask)

  unsigned int i_src =*(unsigned int*) src;

  unsigned int i_dst =*(unsigned int*) dst;

  unsigned int res =(I_dst &~遮罩)|(I_src &遮罩);

  memcpy (dst、res、len);

 

测试()

  const int flash_address = 0x0FFFFC;

  const int 值= 123456;

  // const int magic = 0xA442;//-不使用,因为 BOOTCFG 密钥位为0

 

  //从 BOOTCFG 读取 KEY 位

  System_printf ("BOOTCFG key:%d\n"、(*(unsigned int*) BOOTCFG)& 0x16);

 

  //从闪存读取数据

  system_printf ("之前:%d\n"、*(int*) flash_address);

  system_flush();

 

  //将地址写入 FMA

  memcpy1 ((void*) FMA、&flash_address、4、0xFFFFFF);

 

  //将数据写入 FMD

  memcpy1 ((void*) FMD、&value、4、0xFFFFFFFF);

 

  //将 FMPKEY 和位 COMT +写入 FMC

  unsigned int fmc =((*(unsigned int*) FLLPEKEY)& 0xFFFF)/* magic*/<< 16)| 0x09;

  memcpy1 ((void*)(FMC)、&FMC、4、0xFFFFFF000F);

 

  //等待操作完成

  int i = 0;

  while (((unsigned char*) FMC)[0]!= 0)

  {

      i++;

  }

 

  //再次从闪存读取数据--现在应该被修改

  System_printf ("在:%d\n"、*(int*) flash_address 之后");

  system_flush();

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

    您好、Gergely、
    要对闪存进行编程、您需要使用闪存 API。 请参阅 TIvaWare 外设驱动程序库用户指南并转至闪存章节。 闪存是非易失性存储器。 您不能像写入 SRAM 存储器那样对其进行写入。 使用 API 将隐藏 编程和擦除闪存所涉及的许多详细操作。  

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

    感谢您的提示、我自己没有找到此文档。

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

    您好、Gergely、

     如果您安装 TivaWare、则用户指南将位于 docs 目录下。 在我的案例中、它位于 C:\ti\TivaWare_C_Series-2.1.3.156\docs\SW-TM4C-DRL-UG.2.1.3.156.pdf 中。 您可以在同一文件夹中找到许多其他用户指南。 我还在此附上用户指南。

    e2e.ti.com/.../SW_2D00_TM4C_2D00_DRL_2D00_UG_2D00_2.1.3.156.pdf