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:用户寄存器写入

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1478347/tm4c129encpdt-user-register-writing

器件型号:TM4C129ENCPDT
主题中讨论的其他器件: UNIFLASH

工具与软件:

您好!

我需要一个命令行来写入 TM4C 的用户寄存器0。  

我找到了这一个:  

dslite load --config "C:\[...]\tm4c129encpdt.ccxml""C:\[...]\data.bin"、0x400fe1e0

使用"data.bin"时、包含我要写入的值的文件。

这可以正常工作、但不会传送数据、如果我断开电路板的电源并重新供电、数据将被擦除。

如何解决该问题?  

谢谢!

此致

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

    您好!

    [报价用户 id="643586" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1478347/tm4c129encpdt-user-register-writing "]dslite load --config "C:\[...]\tm4c129encpdt.ccxml""C:\[...]\data.bin"、0x400fe1e0

    我认为您不能使用 dslite 对 user0寄存器进行编程。 这通常在代码中使用 FlashUserSave () API 或使用 LM Flash Programming 或 Uniflash 等工具来完成。 请参见下文。 我认为 dslite 仅对所需的值进行编程、以地址 0x400fe1e0。 您的 data.bin 文件不是执行以使 user0永久的程序。 您可以参考 FlashUserSave() API 源、在该源中、它写入 FMC 寄存器的 Comit 位以使该寄存器成为永久寄存器。  API 将在循环中等待、直到操作完成。 这不仅仅是对寄存器的简单写入。 这是对非易失性寄存器的编程、这类似于对闪存地址进行编程、其中编程可能需要数百 us。  

    int32_t
    FlashUserSave(void)
    {
        //
        // Setting the MSB of FMA will trigger a permanent save of a USER
        // register.  Bit 0 will indicate User 0 (0) or User 1 (1).
        //
        HWREG(FLASH_FMA) = 0x80000000;
        HWREG(FLASH_FMC) = FLASH_FMC_WRKEY | FLASH_FMC_COMT;
    
        //
        // Wait until the write has completed.
        //
        while(HWREG(FLASH_FMC) & FLASH_FMC_COMT)
        {
        }
    
        //
        // Tell the flash controller to write the USER1 Register.
        //
        HWREG(FLASH_FMA) = 0x80000001;
        HWREG(FLASH_FMC) = FLASH_FMC_WRKEY | FLASH_FMC_COMT;
    
        //
        // Wait until the write has completed.
        //
        while(HWREG(FLASH_FMC) & FLASH_FMC_COMT)
        {
        }
    
        //
        // Success.
        //
        return(0);
    }

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

    您好、感谢您的回答。

    我忘了准确地说我正在使用 XDS100V2与 JTAG 通信。

    此操作的目标是让生产台使用脚本自动写入此寄存器。

    Im 相当一个乞丐,我怎么能使用 FlashUserSave 你给我看?

    谢谢!

    此致

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

    您好!

     我没有使用 Dslite 写入 USER0寄存器。 您将需要对以下三个地址进行 dslite 写入。  

     HWREG (FLASH_USERREG0)= ui32User0; //将值  ui32User0写入0x400fe1e0处的 USER0寄存器

      HWREG (FLASH_FMA)= 0x80000000; //将0x80000000写入 FMA 寄存器


     HWREG (FLASH_FMC)= FLASH_FMC_WRKEY | FLASH_FMC_COMT;//写入 0xA4420000 | 0x9以永久提交 USER0编程

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

    非常感谢您的帮助。

    我设法做到了这一点;  

     HWREG (FLASH_USERREG0)= ui32User0; //将值  ui32User0写入0x400fe1e0处的 USER0寄存器

      HWREG (FLASH_FMA)= 0x80000000; //将0x80000000写入 FMA 寄存器

    但不是最后一步,我得到这个消息:

    dslite flash --config "C:[...]\configs\tm4c129encpdt.ccxml""C:\[...]\fmc.bin"、0x400fd008
    Cortex_M4_0:GEL 输出:
    存储器映射初始化完成
    错误:Cortex_M4_0:文件加载程序:验证失败:地址0x400FD008上的值不匹配(预期:0xA4420009、实际:0x00000000)请验证目标内存和内存映射。
    失败:文件:c:\[...]\fmc.bin:发生数据验证错误、文件加载失败。

    此外、与记事本的十六进制编辑器相比、数据是反转的、例如、在我前面试图提交的文件中、我必须写以下内容:  

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

    您好!

    [报价用户 id="643586" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1478347/tm4c129encpdt-user-register-writing/5681005 #5681005"]错误:Cortex_M4_0:文件加载程序:验证失败:地址0x400FD008处的值不匹配(预期:0xA4420009、实际:0x00000000)请验证目标内存和内存映射。
    [报价]

    根据数据表、读取 WRKEY 将返回0。 读取 COMT 位上的0表示提交完成。

    您应该执行一次下电上电并检查 USER0寄存器以查看是否有您写入的值。  

    [报价 userid="643586" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1478347/tm4c129encpdt-user-register-writing/5681005 #5681005"]

    此外、与记事本的十六进制编辑器相比、数据是反转的、例如、在我前面试图提交的文件中、我必须写以下内容:  

    [报价]

    对于小端字节序、09位于字节0、00位于字节1、42位于字节2、A4位于字节3。 它们是正确的。  

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

    好吧、事实上它运行得很好!

    我以为0是被忽略的值、这是我的错。

    非常感谢您的帮助! 非常感谢