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.

[参考译文] PGA900:在无法使用 Uniflash 的情况下运行 FW

Guru**** 2406800 points
Other Parts Discussed in Thread: UNIFLASH, PGA900

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1532854/pga900-run-fw-with-uniflash-not-possible

部件号:PGA900
Thread 中讨论的其他器件:UNIFLASH

工具/软件:

你好

我目前尝试使用 Uniflash (9.1.0.5175) 刷写 PGA900。 主要用于对 OTP 存储器进行编程。

对于 CCS、代码在 DEVRAM 中工作。 如果我在调试模式下加载 code.out、则可以进行调试。 如果在释放模式下加载 CODE.out、代码可以运行、并且 CCS 中不会发生错误。

我可以使用 uniflash 将代码加载到 DEVRAM 中。 验证也可以。 但代码不起作用。 在测试中、我只是对一些 DAC 值进行迭代。 如果我尝试从 uniflash 重置控制器、我会收到以下错误消息:

[ERROR] Cortex-M0_0:GEL:执行 OnReset (0) 时出错:无法读取寄存器 xPSR:目标未连接到 (xPSR &~(0x1F))[pga900.gel:39](PGA900StartState ()[pga900.gel:61]、位于 OnReset (0) 处

同样在 OTP 模式下 (V_OTP=7.5V、pga900.gel:WR_MEM_08 (REMAP_ADDR、0x00);)、代码不起作用。 之后再次启动。

我想知道在发布模式下创建.hex 文件的方式是否存在问题。 我使用 CCS 12.3.0。 您能否提供有关构建设置的信息?  

您知道 uniflash 重置错误的原因吗?

BR  

Sebastian

 

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

    尊敬的 Sebastian:  

    是否尝试使用 Uniflash 加载.hex 文件或.out 文件? 它们是相同的文件,但格式不同 — Uniflash 仅识别.out 文件。 能否共享您正在 Uniflash 中使用的整个.gel 文件?

    您是否还可以共享您的目标配置设置? 屏幕截图正常。 是否使用 XDS110 调试器?

    谢谢、

    Maggie

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

    尊敬的 Sebastian:  

    使用.out 文件、我能够在 DEVRAM 中运行代码。 复位仍发生但代码正在运行后的错误。
    遗憾的是、更改重映射位并为 OTP 应用 7.5V 后、代码在下电上电后不会运行。

    很高兴听到.out 文件工作! 当您更改重映射位并为 OTP 应用 7.5V 时、您是否对器件重新编程? 如果要从 OTP 运行、则需要再次使用 Uniflash 来加载到 OTP、而不是 DEVRAM。  

    若要上传到 OTP、必须修改.gel 文件。 从您发布的.gel 文件的第 72 行开始、请将其替换为以下内容。  

    OnTargetConnect()
    {
       GEL_MapOff();
       GEL_MapReset();
       GEL_MapAddStr(0x00000000, 0, 0x00002000, "RAM|AS4", 0);  // OTP
       GEL_MapAddStr(0x21000000, 0, 0x00002000, "R|W", 0);  // Development RAM
       GEL_MapAddStr(0x20000000, 0, 0x00000400, "R|W", 0);  // SRAM Internal
       GEL_MapAddStr(0x40000000, 0, 0x00000080, "R|W", 0);  // EEPROM 
       GEL_MapAddStr(0x40000080, 0, 0x00000008, "R|W", 0);  // EEPROM Cache
       GEL_MapAddStr(0x40000088, 0, 0x00000578, "R|W", 0);  // Control and status registers
       GEL_MapAddStr(0xE000E000, 0, 0x00000F00, "R|W", 0);  // M0 registers
       GEL_MapOn();
       PGA900StartState();
       GEL_TextOut("****  PGA900 Initialization is in progress .......... \n","Output",1,1,1);	
       Disable_Watchdog();
       Config_Remap();
       GEL_TextOut("****  PGA900 Initialization is Done ****************** \n","Output",1,1,1);	
    }
    
    OnPreFileLoaded()
    {
        GEL_TextOut("**** PGA900 OnPreFileLoaded .......... \n","Output",1,1,1);
        Config_Remap();
        GEL_TextOut("**** PGA900 OnPreFileLoaded is done **** \n","Output",1,1,1);
    }

    请注意我发布的片段的第 5 行与您发布的文件的第 76 行之间的差异。 此外,我的片段还包括一个附加函数 OnPreFileLoaded ()。  

    用户可能希望生成另一个.gel 文件、而不是修改现有文件。 这样、您就可以有一个 pga900-devram.gel 和一个 pga900-otp.gel。  

    您的目标配置设置似乎缺少我的几个属性。 遗憾的是、您好像在使用 XDS200 调试器、同时我使用了 XDS110 调试器。 我目前无法访问 XDS200 调试器、因此我的帮助会受到限制。 但 从 PGA900 软件快速入门指南中、以下是在 CCS 中编译目标配置文件时应使用的设置:

    我在构建目标配置文件以链接到修改后的.gel 文件时采取额外步骤:

    因此、我最终在.ccxml 文件中添加了这个额外块:

                    <device HW_revision="1" XML_version="1.2" description="PGA900" id="PGA900_0" partnum="PGA900ARHHR" simulation="no">
                                                                                    
                        
                        
                        <router HW_revision="1.0" XML_version="1.2" description="CS_DAP Router" id="CS_DAP_0" isa="CS_DAP">
                                                                                                    
                            
                            
                            <subpath id="subpath_0">
                                                                                                                    
                                
                                
                                <cpu HW_revision="1.0" XML_version="1.2" description="Cortex_M0 CPU" deviceSim="false" id="Cortex_M0_0" isa="Cortex_M0">
                                                                                                                                    
                                    
                                    
                                    <property Type="filepathfield" Value="..\..\emulation\gel\pga900_otp_program.gel" id="GEL File"/>
                                                                                                                                
                                    
                                    
                                    <property Type="choicelist" Value="0" id="bypass"/>
                                                                                                    
                                    
                                    <property Type="choicelist" Value="0" id="Slave Processor"/>
                                                                                                
                                
                                </cpu>
                                                                                                                
                            
                            
                            </subpath>
                                                                                                
                        
                        
                        </router>
                                                                                
                    
                    
                    </device>

    打开 Uniflash 时、选择刚创建的目标配置文件:

    我收到.gel 文件加载错误、但没关系:

    谢谢、

    Maggie

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

     Config_Remap () 处于 DEVRAM 状态。  
    现在、pga900-otp.gel 的第 69 行为: WR_MEM_08 (REMAP_ADDR、0x00);
    现在、代码也在下电上电后运行。

    感谢您的支持!

    uniflash 中的 PGA900 工作 GEL 文件:

    //####################################################
    //PGA900 GEL file
    //v1.1 March 4,2014
    //####################################################
    
    //*******************************************************************
    //Watchdog register
    //*******************************************************************
    #define WDOG_CTRL_STAT_ADDR (0x4000051C)
    
    //*******************************************************************
    //Remap register
    //*******************************************************************
    #define REMAP_ADDR (0x40000220)
    
    //*****************************************************************************
    //Read write prototype
    //*****************************************************************************
    #define WR_MEM_08(addr, data) *(unsigned char*)(addr) = (unsigned char)(data)
    #define RD_MEM_08(addr)       *(unsigned char*)(addr)
    
    //*****************************************************************************
    //Global Functions
    //*****************************************************************************
    
    //Watchdog is disabled to eliminate warm resets during debug
    Disable_Watchdog()
    {
       WR_MEM_08(WDOG_CTRL_STAT_ADDR,0x00);
    }
    
    //Set the processor to User mode after a file is loaded, on a 
    //restart or on a reset
    //This will facilitate code loading and debug by putting the processor in a known
    //state
    
    PGA900StartState()
    {
       xPSR = (xPSR & ~0x1F) | 0x10;   
    }
    
    OnFileLoaded()
    {
       GEL_TextOut("****  PGA900 OnFileLoaded .......... \n","Output",1,1,1);	
       PGA900StartState();
       Config_Remap();
       GEL_TextOut("****  PGA900 OnFileLoaded is done **** \n","Output",1,1,1);	
    }
    
    OnRestart()
    {
       GEL_TextOut("****  PGA900 OnRestart .......... \n","Output",1,1,1);	
       PGA900StartState();     
       Config_Remap();
       GEL_TextOut("****  PGA900 OnRestart is done **** \n","Output",1,1,1);	
    }
    
    OnReset()
    {
       GEL_TextOut("****  PGA900 OnReset .......... \n","Output",1,1,1);	
       PGA900StartState();
       Disable_Watchdog();
       Config_Remap();
       GEL_TextOut("****  PGA900 OnReset is done **** \n","Output",1,1,1);	
    }
    
    Config_Remap()
    {
       WR_MEM_08(REMAP_ADDR,0x00);
    }
    
    OnTargetConnect()
    {
       GEL_TextOut("****  Hello World from pga900-otp.gel located at uniflash 910 emulation folder with WR_MEM_08(REMAP_ADDR,0x00) \n","Output",1,1,1);	
       GEL_MapOff();
       GEL_MapReset();
       GEL_MapAddStr(0x00000000, 0, 0x00002000, "RAM|AS4", 0);  // OTP
       GEL_MapAddStr(0x21000000, 0, 0x00002000, "R|W", 0);  // Development RAM
       GEL_MapAddStr(0x20000000, 0, 0x00000400, "R|W", 0);  // SRAM Internal
       GEL_MapAddStr(0x40000000, 0, 0x00000080, "R|W", 0);  // EEPROM 
       GEL_MapAddStr(0x40000080, 0, 0x00000008, "R|W", 0);  // EEPROM Cache
       GEL_MapAddStr(0x40000088, 0, 0x00000578, "R|W", 0);  // Control and status registers
       GEL_MapAddStr(0xE000E000, 0, 0x00000F00, "R|W", 0);  // M0 registers
       GEL_MapOn();
       PGA900StartState();
       GEL_TextOut("****  PGA900 Initialization is in progress .......... \n","Output",1,1,1);	
       Disable_Watchdog();
       Config_Remap();
       GEL_TextOut("****  PGA900 Initialization is Done ****************** \n","Output",1,1,1);	
    }
    
    OnPreFileLoaded()
    {
        GEL_TextOut("**** PGA900 OnPreFileLoaded .......... \n","Output",1,1,1);
        Config_Remap();
        GEL_TextOut("**** PGA900 OnPreFileLoaded is done **** \n","Output",1,1,1);
    }