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/TM4C1294NCPDT:无法通过使用 SPI 与 tm4c1294ncpdt 通信在外部闪存(MT29F2G01ABAGDWB)中的8个位置开始写入数据。

Guru**** 2618835 points

Other Parts Discussed in Thread: MSP430F5529

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/785104/ccs-tm4c1294ncpdt-not-able-to-write-the-data-in-starting-8-locations-in-external-flash-mt29f2g01abagdwb-by-using-spi-communication-with-tm4c1294ncpdt

器件型号:TM4C1294NCPDT
主题中讨论的其他器件:MSP430F5529

工具/软件:Code Composer Studio

您好!

如果我在编写... 假设闪存中有70字节的数据、当我们读取时、我们观察到起始8 个位置的数据未成功写入、但在闪存的第8个位置之后、70字节数据被成功写入。

如果我在 MSP430F5529和闪存之间进行通信.. 我能够成功地在整页上写入数据、这意味着闪存没有任何问题。

请仔细阅读下面的 SPI 代码初始化,并告诉我是否缺少任何配置...................

闪存初始化()

SysCtlPeripheralEnable (SYSCTL_Periph_SSI2);

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);

GPIOPinConfigure (GPIO_PD3_SSI2CLK);                                                             // SCLK

GPIOPinTypeGPIOOutput (GPIO_PORTK_base、GPIO_PIN_6);                         //~CS -将其配置为 GPIO 输出

GPIOPinWrite (GPIO_PORTK_base、GPIO_PIN_6、GPIO_PIN_6);                     //~CS -将其设置为逻辑高电平

GPIOPinConfigure (GPIO_PD1_SSI2XDAT0);                                                      // MOSI

GPIOPinConfigure (GPIO_PD0_SSI2XDAT1);                                                    // MISO

GPIOPinTypeSSI (GPIO_PORTD_base、GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3);A

SysCtlPeripheralReset (SYSCTL_Periph_SSI2);

SSIConfigSetExpClk (SSI2_base、ui32SysClkFreq、SSI_FRF_MOTO_MOTO_MODE_3、SSI_MODE_MASTER、1000000、8);


此致、

Anamika。

  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Anamika、您好!
    我在 SSI2的引脚配置中没有发现任何错误。 需要检查的一点是、外部闪存是否需要同时将极性和相位设置为1的 SSI_FRF_MOTO_MODE_3帧格式。

    由于 MSP430可与闪存配合使用、我建议您使用逻辑分析仪来捕获和比较 Tiva 器件和 TSP430器件之间的波形。 您似乎已将其与 Tiva 部分结合使用。 它仅丢失了前8个字节。 特别要比较前几个字节传输的波形、看看它们有何不同。 请对照外部闪存数据表验证是否满足时序要求。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    我最近在阅读数据表、启用 MPU 通常需要特权模式顺序才能写入  0-7 优先级组中设置的外部存储器地址范围。  这似乎也有助于将指定的受保护外部非线程闪存存储器组中的 R/W 异常陷阱发送给 NMI 故障处理程序。 Tivaware MPU 使能 默认值还 会将与存储器相关的异常捕获 到 默认 NMI 处理程序以进行调试检查。 我还没有冒险 配置  任何受保护的存储器范围组、但它似乎足够简单。

    MPU 的默认配置如下:

    /*启用 Cortex-M 存储器保护单元 MPU=PRIV_DEFAULT:
    *在特权模式下启用默认存储器映
    射、*在没有定义其他区域时启用。 HARDFLT_NMI:在
    硬故障或 NMI 异常处理程序中启用* MPU。
    *如果未启用此选项、则 MPU 将被禁用、同时
    *在这些异常处理程序中*应用默认
    的*内存映射。 //
    map_MPUEnable (MPU_CONFIG_PRIV_DEFAULT | MPU_CONFIG_HARDFLT_NMI);
    
    // MPU 属性软件特权模式,RW 完全访问*//
    对区域属性进行编程。 将 TEX 字段和 S、C、
    //和 B 位设置为适用于所有 Tiva C 和
    // E 系列存储器的固定值。
    HWREG (NVIC_MPU_ATtr)=
    ((NVIC_MPU_ATTR_AP_RW_RW 和~(NVIC_MPU_ATTR_TEX_M | NVIC_MPU_ATTR_Cacheable))
    |NVIC_MPU_ATTR_sharedable | NVIC_MPU_ATTR_BUFFRABLE);//NVIC_MPU_ATTR_AP_RW_NO 

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

    正如我已经测试并看到的,实际上数据是从页的起始位置成功写入的,问题是在读取时,然后我在读取前观察到,RX FIFIO 中已经有8个字节的数据。 这意味着 RXFIFO 未被清零、这就是为什么要首先清零 RXFIFO、我将使用以下小代码获得8字节虚拟数据
    for (i=0;i<8;i++)
    while (!SSIDataGetNonBlocking (SSI2_base、&dummy));
    然后、我可以接收写入外部闪存页第一个位置的数据、该数据可以成功工作、但我的问题是如何在单个指令中刷新 RXFIFO、而不是在循环中调用相同的指令。

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

    Anamika、您好!
    很高兴您找到了问题的原因。 我建议您使用 SSIDataGetNonBlocking () API 从 SSI 端口读取 RXFIFO 中剩余的数据。 这样可确保接收 FIFO 为空、因此我们不会读取任何不需要的垃圾。 SSIDataGetNonBlocking 函数在返回数据时返回"true"、在未返回数据时返回"false"。 "非阻塞"函数检查接收 FIFO 中是否有数据、如果没有数据、则不会"挂起"。

     在您读取外部闪存之前、您首先执行如下操作。  

    while (SSIDataGetNonBlocking (SSI0_BASE、&pui32DataRx[0]))

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

    [引用 user="Anamika Kumari">但我的问题是如何在单个指令中刷新 RXFIFO、而不是在循环中调用相同的指令。
    [/报价]

    也许一个 Thumb 指令汇编能够更快地完成 清空 RX-FIFO、也许需要 调用 void __asm? 您还可以在 CCS 工程中启用汇编输出、以生成每个模块的调试*。asm 文件。 这 显示 了编译器如何以及在何处汇编现有模块代码。 我建议您查看 数据表中包含的 Thumb 指令区域以获取线索。  

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


    感谢您的回复。 现在、我将获得正确的数据。

    此致
    Anamika