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.

[参考译文] CCS/EK-TM4C1294XL:EEPROM 帮助!!

Guru**** 2472400 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/679229/ccs-ek-tm4c1294xl-help-with-eeprom

器件型号:EK-TM4C1294XL

工具/软件:Code Composer Studio

extern void EEPROMRead (char * pui32Data、uint32_t ui32Address、
uint32_t ui32Count);


extern uint32_t EEPROMProgram (char * pui32Data、
uint32_t ui32地址、
uint32_t ui32Count);

这是提到的两个原型、它们无法正常工作。

即使代码中没有任何错误、控制器也会在每个 rread 指令处进入无限循环。

请帮助!!

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

    您需要提供比您所做的更多详细信息、以便我们能够提供帮助、还包括您的程序的完整源代码、尤其是初始化将帮助我们为您提供支持。

    请尝试使用"插入代码、攻击文件等..." 然后使用语法 Highlighter 添加您的代码、该语法显示为" "按钮。

    EEPROM API 是否正常工作? 您使用的是什么 EEPROM?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    #include "driverlib/EEPROM.h"
    uint32_t e2size、e2block;
    uint32_t ui32EEPROMInit、ui32EEPROMStatus;
    
    void main ()()({
    sysctl_Periph_EEPROM0);
    while (!SysCtlSysPeripalReady (symmet1
    
    
    
    )=
    
    
    
    
    
    
    
    }uEEPROM32n (sysInit);while = 1}uEEPROM32n (while)、ePROMx 2)= 1 (eProMx 1)、ePro2 (eProMx 1) 1、0);
    UARTprintf ("EEPROM size %d bytes\n"、e2size);
    UARTprintf ("EEPROM 块计数:%d\n"、e2block);
    char * textToWrite="ABCD";
    ui32EEPROMStatus = EEPROMProgram (textToWrite、0x400、 32);
    while (ui32EEPROMStatus = EEPROM_RC_working)
    {
    }
    要读取的 char*文本;
    EEPROMRead (读取、0x400、160);
    
    while (1)
    {
    }
    

    我为您提供程序列表、基本上我想将一些数据发送到 MCU 的内部 EEPROM、并在需要时重新检索数据、但当控制器到达"读取"指令时、MCU 会停在此处进入无限循环。

    与所有用于控制 EEPROM 的基本代码不同、我在 eeprom.h 文件中的 CCS 版本上具有的 API 中包括:

    extern void EEPROMRead (char * pui32Data、uint32_t ui32Address、
    uint32_t ui32Count);


    extern uint32_t EEPROMProgram (char * pui32Data、
    uint32_t ui32地址、
    uint32_t ui32Count);

    谢谢!!

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

    [引用 USER="Rohan Parvatiyar"]与每个人用于控制 EEPROM 的基本代码不同,在我的 CCS 版本上使用的 API 中[/引用]

    您是否会"快速、轻松和增强"这家供应商的努力-通过在  这里展示"每个人的基本准则"-这样它可能  会与您的准则"高效比较和对比"-这还不是(尚未)成功?

    轻松完成"助手"工作-工作(非常)对您有很大的好处...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    #include 
    #include 
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "inc/hw_gpio.h"
    #include "inc/hw_ints.h"
    #include "driverlib/rom.h"
    
    #include "driverlib/rom_map.h"
    #include "driverlib/drivers.util.h"
    
    #include "drivers/drivers.idio.ide"#include "drivers/driverlib./drivers.mdio.h #include "#include "#include "driverlib"
    
    
    
    
    
    *
    *变量
    *
    ****
    */
    
    #define E2PROM 测试地址0x0000
    
    /*********
    *主要内容 c
    /
    
    int main (void){
    uint32_t e2size、e2block;
    uint32_t ui32SysClock;
    uint32_t ui32EEPROMInit、ui32EEPROMStatus;
    
    //数据变量和地址
    uint32_t pu32Data[2];
    uint32_t pui32read[*****
    
    
    将 CPU 时钟设置为120 MHz //
    //从 PLL 以120MHz 运行。
    //
    
    ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000);
    
    
    //******** 启用板载 LED 的系统时钟 //
    //启用用于板载 LED 的 GPIO 端口。
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
    
    
    //检查是否启用了外设访问。
    
    while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION)
    ){
    }
    //
    //关闭 LED。
    //
    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0x0);
    //为 LED 启用 GPIO 引脚(PN0)。 将方向设置为输出、
    并且//启用 GPIO 引脚以实现数字功能。
    
    GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0);
    SysCtlDelay (20000);
    
    //打开板 LED
    
    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、GPIO_PIN_0);
    //********* 初始化 UART //
    
    /* EEPROM 设置*/
    SysCtlPeripheralEnable (SYSCTL_PERIPH_EEPROM0);// EEPROM 激活
    //
    ////等待 EEPROM 模块准备就绪。
    //
    while (!SysCtlPeripheralReady (SYSCTL_Periph_EEPROM0))
    }{
    
    
    //等待 EEPROM 初始化完成
    
    ui32EEPROMInit = EEPROMInit ();
    
    //
    检查 EEPROM 初始化是否返回错误
    //通知应用
    //
    if (ui32EEPROMInit = EEPROMInit ();//
    
    
    
    
    
    
    
    
    
    配置 GPIO0_PIN_GPIO0_GPIO0_PIN_GPIO0_GPIO0_GPIO0_PIN_GPIO0_GPIO0_PIN_GPIO0_GPIO0_PIN_GPIO0_PIN_GPIO0_PIN_GPIO0_GPIO0_PIN_GPIO0_PIN_PIN_GPIO0_GPIO0_PIN_GPIO0_PIN_GPIO0_GPIO0_PIN_GPIO0_GPIO0_GPIO0_GPIO0_PIN_PIN_
    
    UARTStdioConfig (0、115200、ui32SysClock);
    
    /******* 主要行动 /
    
    UARTprintf ("EEPROM 测试程序\r\n");
    
    
    e2size = EEPROMSizeGet ();//获取 EEPROM 大小
    UARTprintf ("EEPROM 大小%d 字节\n"、e2size);
    
    e2block = EEPROMBCountGet ();//获取 EEPROM 块数
    UARTingf ("EEPROM 大小%d 字节\n"、e2size);eEEPROM 块数组计数
    
    ("EEPROMb)***/组计数 EEPROM 计数(") //
    将一些数据编程到地址0x0000处的 EEPROM 中。
    //计算 EEPROM 的大小和该大小的块数
    pui32Data[0]= 0xFFFFFFFF;
    pui32Data[1]= 0x00000000;
    //等待编程设置超过
    ui32EEPROMStatus = EEPROMProgram (pui32Data、0x400、sizeof (pui32Data);
    while (ui32EEPROMStatus =
    
    %/u32n)、返
    
    工 EEPROM。
    //如果
    
    (ui32EEPROMStatus!= EEPROM_RC_WRBUSY) EEPROMRead (pui32Read、0x400、sizeof (pui32Read));
    
    UARTprintf ("从 EEPROM 读取的数据:%d\n"、pui32Read)、
    
    则不要尝试读取
    
    //对于整个 EEPROM:迭代次数= EEPROMSIZE/EEPROMBLOCKS 数量:j<(e2size/e2block)
    //计算如下:
    //内部循环总是遍历每个块
    //外部循环负责从起始地址到每个块的正确偏移
    //第一个块:j=0l; 因此,内部循环从0到95位置
    //内部循环的第二次迭代:j 是1 (外部循环),因此我们遍历位置96到192。
    (二 /
    对于(j=0;j<(e2size/e2block);j++){
    
    对于(i=0;i "="" %d="" :="" location:,%d",="" j,i);="" uartprintf("data="" from="" eeprom:="" %d\n",="" pui32read);="" uartflushtx(1);="" data="" be="" flushed="" end="" inner="" loop="" uartprintf("done="" j);="" out="" whole="" eeprom:\n");="" (1)="" return="" 0;="" }
    

    那么、这将是其他所有人都拥有的基本代码...

    希望这能帮助我的助手解决我的问题!!

    谢谢!

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

    和:

    • 您是否尝试过-这是准确的代码-如果是-您的结果是什么?
    • 您做了哪些更改/更改-现在您列出了"每个人的工作代码?"    您是否不能在现有(每个人)代码的右侧使用"颜色代码您的更改"、以便快速轻松 地进行比较?

    如前所述-这样、"并排"比较-而不是(大量)向上/向下滚动-极大 地简化了(无)助手的"磨损" crüe…

    如果您运行了"每个人的代码"-这将进一步帮助您-如果您只描述"每 个人的代码"在哪里以及如何"、 "未能达到您的预期。"

    您的目标应该是使" 识别代码中的任何差异"以及您 的"突出显示  "代码错误的开始"尽可能清晰且易于识别。   你不同意吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    int main (void){
    uint32_t e2size、e2block;
    uint32_t ui32SysClock;
    uint32_t ui32EEPROMInit、ui32EEPROMStatus;
    
    //数据变量和地址
    uint32_t pu32Data[2]; char * textToWrite ='a';
    uint32_t pui32read[2]; char * textToRead;
    pui32Data[0]= 0xFFFFFFFF;
    pui32Data[1]= 0x00000000;
    //等待编程设置超过
    ui32EEPROMStatus = EEPROMProgram (pui32Data、0x400、sizeof (pui32Data));ui32EEPROMStatus = ROM_PROTEX400 (textToEEPROM、0x400) 200);
    while (ui32EEPROMStatus =EEPROM_RC_working){
    }
    UARTprintf ("写入 EEPROM 的数据:%d\n"、pui32Data);
    //
    读回它。
    //如果
    
    (ui32EEPROMStatus!= EEPROM_RC_WRBUSY) EEPROMRead (pui32Read、0x400、sizeof (pui32Read))、则不要尝试读取; EEPROMRead (读取、0x400、200);
    
    

    我在其他人代码的右侧写下了更改后的代码。  

    谢谢!!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    罗汉写道:“我在其他人的代码的右侧写下了更改后的代码。 "

    我看到" 4个实例"(可能)代码更改-在" 4月11日、12:04发布"中-刚刚到达。 这是您所做更改的"全部"吗?

    美国中西部午夜过后、我即将"完成"。 (Kat & Dog seek (部分)公司... 他们(两人)正在学习"C"。。)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢!!
    我发现我的解决方案需要灵感!!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的解决方案将激励许多人!   非常高兴-对您来说-您的卓越坚持得到了回报。   (轻微鼓励和更加专注是"所需的一切!"

    现在-如果您觉得很好-澄清您的"对"每个人的准则"的更改/更正-以便"每个人都少于"可以从您的发现中获益!  (即那些发现-此主题...)

    做得好!   (您(现在)感觉如何好-您始终清楚自己足够聪明-您需要(稍微)更好的关注-就是这样。)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    uint32_t bla[1]、red[1];
    bla[0]= 0xFFFFFFFF;
    
    ui32EEPROMStatus = ROM_EEPROMProgram (bla、0x400、sizeof (bla));
    while (ui32EEPROMStatus = EEPROM_RC_working)
    {
    }
    //*textToWrite++;
    ROM_EEPROMRead (红色、0x400、sizeof (红色)); 

    因此、如果要将无符号整数值存储到内部 EEPROM 中并以相同的方式对其进行重新检索、则这将是 rsult。

    刚刚将 EEPROMProgram 与 ROM_EEPROMProgram 进行了更改、并将 EEPROMRead 函数与 ROM_EEPROM 类似。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    (这)至少对我来说、将"意外"记录为"意外"。 除非此处使用的"前言"ROM 不调用 MCU 的"Rom 驻留代码"、并且(然后)"重叠"证明"令人不安"。 也许供应商代理可以审核-并确认/建议...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、

    由于 ROM 调用不应与正常调用不同、因此确实是意料之外的。

    未突出显示的是、传递到 API 中的变量不再是 char、而是 uint32_t 我怀疑 tweak 也是解决问题的关键。 还将注意 sizeof ()在两个 API 中传递的第三个参数的用法,这两个 API 已正式硬编码为另一个更改。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    伟大的拉尔夫-谢谢你-我是50K 英尺的"引导"-你的类型/类型的"精细细节"-真的证明(极其)有用...