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.

[参考译文] TM4C1294KCPDT:TM4C1294KCPDT

Guru**** 2465700 points
Other Parts Discussed in Thread: TM4C1294KCPDT, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1455143/tm4c1294kcpdt-tm4c1294kcpdt

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

工具与软件:

您好!

 我们已使用 Tiva 系列控制器(TM4C1294KCPDT)开发了一个 PCB、我们对 PCB 使用相同的硬件和软件已超过两年、我们最近 通过供应商从 TI 采购了一个5000个 TM4C1294KCPDT 控制器、但在采购的控制器中、我们遇到了端口 C 5、6、7引脚的问题。 问题在于、我们可以将端口 C - 5、6、7写为正常的 GPIO、使其正常运行、同时我们在程序中将其作为 UART 函数使用、端口- C 引脚始终处于高电平状态。 随附所采购控制器的原理图和 COC 以供参考。 提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题是我们可以将端口 C -5、6、7写入正常的 GPIO、作为正常的 GPIO、它运行正常、而我们在程序中将它用作 UART 函数端口 C 引脚始终处于高电平状态。

    您是说所有电路板都有问题、还是仅部分电路板有问题? 哪个引脚连接到 UARTTX、哪个引脚连接到 UARTRX? 您的 IC16是否驱动 PC5、6、7?

    请注意、今天和明天是 TI 的美国公共假期、预计会有延迟。  

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

    1.您说所有主板都有问题吗?

    回复: 这个问题发生在最近购买的 TM4C1294KCPDT 控制器的5NO。 我们购买的以前的控制器不存在问题。(购买详情如下所示)

    哪个引脚连接到 UARTTX、哪个引脚连接到 UARTRX?

    回复:   UARTTX-PC7 (22)、UARTRX-PC6  (23)、UARTEN - PC5 (24)。

    3.您的 IC16是否驱动 PC5,6,7?

    回复 :是的,IC16是一款用于将 UART 转换为 RS485的收发器 IC 。我们使用10K 电阻器拉低 UARTEN - PC5 (24)并拉高 UARTRX - PC6 (23)。

    其他信息-

    我们最近使用两种不同的方法测试了控制器(即 PCB)。

    将 端口 C - 5、6、7配置 为 GPIO、工作正常。

    2.我们将 端口 C-5,6,7配置为使用轮询方法的 UART 功能,在传输数据时,所有传输的数据都是255 (十进制),其中数据格式不正确。

     使用 中断方法将端口 C - 5、6、7配置为 UART 函数、未实现中断、因此 端口 C - 5 (UARTEN)始终为高电平状态。

    提前感谢!!!

    您能确认 COC 中提供的数据代码吗?

    e2e.ti.com/.../Texas-COC-000020_5F00_page_2D00_0001.pdf

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

    您好!

     您可以在 LaunchPad 上运行代码吗? 您在示波器上看到 TX 和 RX 是什么? 这是为了确保不是软件配置问题。  

     为了进行实验、在您的板上、您可以将您的 PC5、6、7与 IC16隔离吗? 您是否可以看到在隔离时 UARTTX 切换?  

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

     您可以在 LaunchPad 上运行代码吗?

        是的、在 LaunchPad 中、端口 C 5、6、7的 UART 函数可以在同一软件中正常运行。

     您在示波器上看到 TX 和 RX 是什么? 这是为了确保不是软件配置问题。

         端口 C -5、6、7 (UART)始终作为高电平状态。 我可以保证这不是软件问题。

     为了进行实验、在您的板上、您可以将您的 PC5、6、7与 IC16隔离吗?

        已经完成了、没有改进。

     您是否可以看到在隔离时 UARTTX 切换?  

        不、它始终处于高电平状态。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    回复:  UARTTX - PC7 (22)、UARTRX  - PC6 (23)、UARTEN - PC5 (24)。

    PC7用于 UART5TX、PC6用于 UART5RX。 您的引脚多路复用是正确的。 不确定为什么它在您的定制电路板上无法正常工作、但在 LaunchPad 上可以。 您能否展示 UART5初始化的代码片段?

     

    可以进行两次实验吗? 首先将 UART5置于内部环回模式。 您能看到正确的行为吗? 您能否收到传输的数据? 接下来、请勿启用内部环回、而是只需在电路板上将 UART5TX 和 UART5RX 连接在一起。 您能否收到传输的数据? 如果可能、您可以尝试 UART0、1、2、3等不同的 UART 吗? 我只想知道该问题是否仅与您 电路板上的 UART5相关。  

    19.3.10环回操作

    将 UARTCTL 寄存器(见)的 LBE 位置位、UART 模块将工作于内部环回模式下。 在环回模式下、从 UnTx 输出端发送的数据将会从 UnRx 输入端接收。 请注意、应先对 LBE 位进行置位、然后再启用 UART。

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

    您能否展示 UART5初始化的代码片段?

        应用手册。

    不确定为什么它在您的定制电路板上无法正常工作、但在 LaunchPad 上可以。

      UART5  使用我们之前购买的用于定制电路板的控制器、正常工作。 但最近采购的控制器存在 UART5问题。

    可以进行两次实验吗? 首先将 UART5置于内部环回模式。 您能看到正确的行为吗? 您能否收到传输的数据? 接下来、请勿启用内部环回、而是只需在电路板上将 UART5TX 和 UART5RX 连接在一起。 您能否收到传输的数据? 如果可能、您可以尝试 UART0、1、2、3等不同的 UART 吗? 我只想知道该问题是否仅与您 电路板上的 UART5相关。  

     很快会给您更新。

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

    UART5 init (轮询方法)

    在该方法中、UART5正常工作。

    UART5 INIT (中断方法)

    在此方法中、UART5TX、UART5RX、 UART5TX 始终处于高电平状态

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="636059" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1455143/tm4c1294kcpdt-tm4c1294kcpdt/5585660 #5585660"]

    UART5 init (轮询方法)

    在该方法中、UART5正常工作。

    [报价]

    这就是轮询模式。 在352和353行中、您为 RX 启用了中断。  

    您是否认为此代码在您先前购买的处理器中可以正常运行? 在这种情况下、您是否能够在之前的定制电路板上运行该代码以确认确实出现了这种情况?

    [报价 userid="636059" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1455143/tm4c1294kcpdt-tm4c1294kcpdt/5585660 #5585660"]

    UART5 INIT (中断方法)

    在此方法中、UART5TX、UART5RX、 UART5TX 始终处于高电平状态

    [报价]

    上面有同样的问题。  您是否认为此代码在您先前购买的处理器中可以正常运行? 在这种情况下、您是否能够在之前的定制电路板上运行该代码以确认确实出现了这种情况?

    还请提供您的内部和外部回送结果。

    另外、您是否可以比较当前原理图和之前的定制电路板原理图? 它们是否相同?

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

    这就是轮询模式。 在352和353行中、您为 RX 启用了中断。  

    在轮询方法中、使用第352行和第353行 Rx 中断。 我们将在 while 循环中传输数据、   
    我们将检查 TX 数据、但仅检查 Rx 数据未选中。  

    您是否认为此代码在您先前购买的处理器中可以正常运行? 在这种情况下、您是否能够在之前的定制电路板上运行该代码以确认确实出现了这种情况?

      在上述轮询模式下、在我们的定制电路板中、先前购买和新购买的控制器中都在发送和接收数据。

    UART5函数仅在中断方法中不起作用。

    还请提供您的内部和外部回送结果。

     很快会给您更新

    另外、您是否可以比较当前原理图和之前的定制电路板原理图? 它们是否相同?

    是的、它们是相同的。

    就像我之前说过的,您可以为采购控制器详细说明设备标记(数据代码)

    在数据表中、它提到的前两位标记是制造年份和月份。

    您能否提及上述 COC 列出采购控制器详细信息的制造年份

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否提及采购控制器详情的制造年份在上文提及的 COC

    您好!

     我需要就生产日期代码联系我们的内部团队进行确认。 乍一看、这些器件来自2023年。  

     请告诉我您从何处购买这些器件。 是直接从 TI 购买还是从谁处购买?

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

     先生:

    我希望这封邮件能让您满意。

    我们已经确定了 UART5在中断模式下不工作的原因。

    该问题发生在 EPROM 存储器已满时、它会阻止数据通过我们以这种方式编程的 Tx 引脚(端口 C 引脚7)进行传输。

    新采购的控制器配备了完整的 EPROM 存储器、导致了此问题。

    我的问题是、我们如何在闪存程序之前或期间删除 EPROM 存储器。

    请您及时协助解决此问题、我们将不胜感激。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="636059" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1455143/tm4c1294kcpdt-tm4c1294kcpdt/5589380 #5589380"]

    新采购的控制器配备了完整的 EPROM 存储器、导致了此问题。

    我的问题是、我们如何在闪存程序之前或期间删除 EPROM 存储器。

    [报价]

    尊敬的 Vishnu:

     首先、我已联系内部团队分析生产日期代码。 然而,由于长假期,有些人还没有回来。 我们将在有信息时向您更新。  

     当您讨论 EEPROM 时、我想您指的是片上 EEPROM、对吗?

     向客户交付的原始芯片应具有干净的闪存和 EEPROM。 换句话说、它们将处于出厂设置。 我不明白您的意思、即 EEPROM 已满。 该器件上有6KB 的 EEPROM。 您是说第一次使用设备时设备已满吗? 如果是这种情况、您将无法对 EEPROM 进行编程、您应该在软件开发期间知道这一点。  我感到非常惊讶。 这就是我想要与我们的工程团队确认您的生产日期代码的原因。  

    您可以通过 在应用程序中调用 EEPROMMassErase () API 来擦除 EEPROM。  

    或者、您也可以执行"解锁"操作、将设备恢复为出厂设置。 解锁操作将擦除主闪存和 EEPROM 以及 器件上的所有非易失性寄存器。  有关使用 dbgjtag.exe 命令的详细信息、请参阅本应用手册通过 JTAG 接口使用 TM4C12x 器件第5.3.2节。  

     

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

    当您讨论 EEPROM 时、我想您指的是片上 EEPROM、对吗?

    是的、没错。

    向客户交付的原始芯片应具有干净的闪存和 EEPROM。

    是的、但当我们调试新的控制器时、EEPROM 数据会显示最大值。

    我附上了图片供您参考。

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

    您好!

    [报价 userid="636059" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1455143/tm4c1294kcpdt-tm4c1294kcpdt/5591133 #5591133"]

    是的、但当我们调试新的控制器时、EEPROM 数据会显示最大值。

    我附上了图片供您参考。

    [报价]

    显示的值为0xFFFFFFFF。 这意味着 EEPROM 处于已擦除状态。 这是作为原始器件运输时 EEPROM 的预期状态。  

    从屏幕截图中可以看出、您使用的是一些自定义 EEPROM 驱动程序。 是这样吗? 如果您使用自定义 EEPROM 驱动程序、并且已正确初始化 EEPROM、则可能需要检查驱动程序。  

    为何不按如下所示运行简单的 EEPROM 示例? 您能让这个示例正常工作吗?

    The following example shows how to use the EEPROM API to write a block of data and read it back.
    uint32_t ui32EEPROMInit;
    uint32_t pui32Data[2];
    uint32_t pui32Read[2];
    //
    // Enable the EEPROM module.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_EEPROM0);
    //
    // Wait for the EEPROM module to be ready.
    //
    while(!SysCtlPeripheralReady(SYSCTL_PERIPH_EEPROM0))
    {
    }
    //
    // Wait for the EEPROM Initialization to complete
    //
    ui32EEPROMInit = EEPROMInit();
    //
    // Check if the EEPROM Initialization returned an error
    // and inform the application
    //
    if(ui32EEPROMInit != EEPROM_INIT_OK)
    {
    while(1)
    {
    }
    }
    //
    // Program some data into the EEPROM at address 0x400.
    //
    pui32Data[0] = 0x12345678;
    pui32Data[1] = 0x56789abc;
    EEPROMProgram(pui32Data, 0x400, sizeof(pui32Data));
    //
    // Read it back.
    //
    EEPROMRead(pui32Read, 0x400, sizeof(pui32Read));

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

    我希望这封邮件能让您满意。

    首先,我对延迟响应表示歉意;我们是在节日期间,非常感谢您对所造成的不便的理解。

    感谢您就我们所面临的 EEPROM 问题提供建议。

    您可能怀疑我们可能在使用自定义 EEPROM 驱动程序。 但是、我想澄清的是、我们不使用任何自定义驱动程序。

    我们将按照您为读取和写入数据提供的示例中所述的方式利用 EEPROM。

    澄清:

    1. 为何不按如下所示运行简单的 EEPROM 示例? 您能否让此示例正常工作?:

      • 是的、我们可以成功读取和写入 EEPROM 数据。 问题不出在读取/写入功能。

    2. 初始 EEPROM 数据:

      • 我们主要关注的是 EEPROM 数据的初始状态。 正如您所提到的、原始控制器应该没有 EEPROM 中的数据。 不过、我们发现采购的控制器包含初始上电时的数据。 随附证明、供您在下方参考

      • 我们需要通过向 EEPROM 写入较低的值并读回这些值、来手动降低 EEPROM 数据、从而确认读取/写入操作正常运行。

      • 尽管尝试了 MassErase 函数、但无法解决问题。

    敬请协助您建议在初始上电期间删除 EEPROM 数据的替代方法。

    我已附加 EEPROM 读写函数 FYR。

    感谢您的支持和理解。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="636059" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1455143/tm4c1294kcpdt-tm4c1294kcpdt/5611743 #5611743"]

    我希望这封邮件能让您满意。

    [报价]

    谢谢您、您也是如此。

    首先、对于延迟响应、我深表歉意;我们在节日期间、非常感谢您对所造成的不便的理解。

    一点问题都没有。  

    似乎您怀疑我们可能使用的是自定义 EEPROM 驱动程序。 但是、我想澄清的是、我们没有使用任何自定义驱动程序。

    好的。 感谢您的澄清。

    [报价 userid="636059" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1455143/tm4c1294kcpdt-tm4c1294kcpdt/5611743 #5611743"]

    为何不按如下所示运行简单的 EEPROM 示例? 您能否让此示例正常工作?:

    • 是的、我们可以成功读取和写入 EEPROM 数据。 问题不出在读取/写入功能。

    [报价]

    好的。 感谢您确认可以在原始芯片上读取和写入 EEPROM。

    [报价 userid="636059" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1455143/tm4c1294kcpdt-tm4c1294kcpdt/5611743 #5611743"]

    我们主要关注的是 EEPROM 数据的初始状态。 正如您所提到的、原始控制器应该没有 EEPROM 中的数据。 不过、我们发现采购的控制器包含初始上电时的数据。 随附证明、供您在下方参考

     [报价]

    稍等! 我想你有一些误解。 您是使用 Uniflash 读取 EEPROM 还是闪存主阵列? 请记住、EEPROM 没有内存映射。 您无法使用 Uniflash 读取 EEPROM 内容。 您在映像中显示的是您正在读取位于0x400的主闪存阵列、而不是 EEPROM 的偏移地址0x400。  为了读取 EEPROM 内容、需要运行应用程序以从相对于 EEPROM 模块的指定偏移地址读取数据。 请参阅以下代码。 下面显示的地址0x400不是 CPU 可寻址空间中的存储器映射。  

    //
    //将一些数据编程到地址0x400的 EEPROM 中。
    //
    pu32Data[0]= 0x12345678;
    Pui32Data[1]= 0x56789abc;
    EEPROMProgram (pui32Data、0x400、sizeof (pui32Data));
    //
    //读回。
    //
    EEPROMRead (pui32Read、0x400、sizeof (pui32Read));

    尽管尝试 MassErase 函数、但仍无法解决此问题。

    如果您执行批量擦除、会将 EEPROM 恢复为所有 F。 您需要使用 EEPROMRead 读取内容。  

    确保您遵循该示例。 请参见下文。 在执行任何读取/写入操作之前、必须首先通过调用  EEPROMInit 来初始化 EEPROM。  

    / /
    // Wait for the EEPROM Initialization to complete
    //
    ui32EEPROMInit = EEPROMInit();
    //
    // Check if the EEPROM Initialization returned an error
    // and inform the application
    //
    if(ui32EEPROMInit != EEPROM_INIT_OK)
    {
    while(1)
    {
    }
    }

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

    稍等! 我想你有一些误解。 您是使用 Uniflash 读取 EEPROM 还是闪存主阵列? 请记住、EEPROM 没有内存映射。 您无法使用 Uniflash 读取 EEPROM 内容。

      理解、感谢您的澄清。

    如前所述、我们 主要关注的是 EEPROM 数据的初始状态。 正如您所提到的、原始控制器不应在 EEPROM 中拥有数据。 不过、我们发现采购的控制器包含初始上电时的数据。

    (注:我们可以读取和写入 EEPROM 数据。 但问题是维珍控制器包含 EEPROM 中的数据、因此、由于我们设定了一组规则和序列、我们的代码无法运行)

    敬请协助您建议在初始上电期间删除 EEPROM 数据的替代方法。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="636059" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1455143/tm4c1294kcpdt-tm4c1294kcpdt/5614271 #5614271"]正如我之前所说、我们 主要关注的是 EEPROM 数据的初始状态。 正如您所提到的、原始控制器不应在 EEPROM 中拥有数据。 但是,我们发现采购的控制器包含初始上电时的数据。
    (注:我们可以读写 EEPROM 数据。 但问题是维珍控制器包含 EEPROM 中的数据、因此、由于我们的一组规则和序列、我们的代码无法运行)[/QUOT]

    我觉得这很难相信。 我已经多次提到使用"解锁"操作执行批量擦除。 您表示无法解决该问题。 您能告诉我您使用了什么工具以及使用了解锁器件的步骤吗? 解锁后、可以使用 EEPROMREAD 读取内容吗?  

    您是否还有其他原装芯片可以尝试? 如果存在、只需初始化 EEPROM 并只执行读取、而不执行写入。 我想查看 EEPROM 是否包含所有 F 的值。  

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

    您好!

     我没有听到你的反馈。 我希望您已找到问题的原因。 我现在将结束该主题。 如果您有任何更新、您可以回写此帖子、并且状态将更改为"已打开"。