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.

[参考译文] MSP432E411Y-BGAEVM:SDRAM 的 EPI 总线 GPIO 引脚更改。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189331/msp432e411y-bgaevm-epi-bus-gpio-pin-change-for-sdram

器件型号:MSP432E411Y-BGAEVM
主题中讨论的其他器件:MSP432E401Y

尊敬的团队:

在我们的 MSP432E401Y 定制设计  中、SDRAM 与 EPI 总线接口相连。 但与 SDK 的给定 SDRAM 示例代码相比、引脚发生了单次变化。

变化如下:

EPIOS0的以下 GPIO 示例代码

ROM_GPIOPinConfigure (GPIO_PH0_EPI0S0);

 我们的定制设计包含 用于 EPIOS0的 GPIO   

我所做的更改如下:

ROM_GPIOPinConfigure (GPIO_PK0_EPI0S0);

MAP_GPIOPinTypeEPI (GPIO_PORTK_base、(GPIO_PIN_5|GPIO_PIN_0));

3.需要进行哪些更改才能使 SDRAM 正常工作。

此致、

Naga Narasimha Rao

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

    您好!

     实际上、我在将 EPIOS0映射到 PK0而不是 PH0时没有遇到问题。 我希望它能正常工作。 TM4C129 MCU 实际上有另一个 SDRAM 示例、该示例对 EPIOS0使用 PK0、对 EPIO[3:0]使用其他 PKx。 您需要有 SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK)来启用端口 K、我想您已经启用了。 TM4C129 MCU 与 MSP432E4是相同的器件、但使用 TivaWare SDK。  

    e2e.ti.com/.../sdram.c

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

    /*-版权所有-、BSD
    *版权所有(c) 2017、德州仪器(TI)公司
    *保留所有权利。
    *
    *以源代码和二进制形式重新分发和使用、有无
    *如果满足以下条件、则允许进行修改
    符合*:
    *
    **源代码的重新分发必须保留上述版权
    *注意、此条件列表和以下免责声明。
    *
    **二进制形式的再发行必须复制上述版权
    *请注意、中的此条件列表和以下免责声明
    *随分发提供的文档和/或其他材料。
    *
    **德州仪器公司的名称和名称均不相同
    *其贡献者可用于认可或推广衍生产品
    *未经特定的事先书面许可。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *以及任何明示或暗示的保证、包括但不限于:
    *特定适销性和适用性的隐含保证
    *不承认目的。 在任何情况下、版权所有者不得或
    *派遣国应对任何直接、间接、偶然、特殊、
    *典型或必然的损害(包括但不限于
    *采购替代货物或服务;丧失使用、数据或利润;
    *或业务中断)、无论原因是什么以及任何责任理论、
    *无论是合同、严格责任还是侵权行为(包括疏忽或)
    *否则)因使用本软件而以任何方式产生、
    *即使被告知可能会发生此类损坏。
    *--/版权--*/
    /*********
    *用于 EPI 的 MSP432E4示例代码、可使用 DMA 访问 SDRAM 存储器。
    *
    *说明:EPI 配置为以60MHz 的频率访问 SDRAM 存储器。 。
    *示例对 EPI 的 GPIO 进行编程并配置 EPI。 之后
    *初始化完成、EPI 配置为生成 DMA TX
    *请求将内部缓冲器写入 SDRAM 存储器。 完成后
    *非阻塞式读 FIFO 配置为从 SDRAM 中读出数据
    *另一个内部缓冲器。 生成的数据检查将打印在控制台上
    数据吞吐量。
    *
    * MSP432E401Y
    ***************************************
    */|\||
    *|||
    *-|RST EPI|->SDRAM
    *||
    *||
    *||
    *| PA0|<-- U0RX
    *| PA1|->U0TX
    *作者:Amit Ashara
    秘书长的报告 /
    /* DriverLib 包括*/
    #include

    /*标准包括*/
    #include
    #include
    #include

    /*通过控制台显示包括*/
    #include "uartstdio.h"

    /*为示例的范围定义*/
    #define SDRAM_START_ADDRESS 0x00000000
    #define SDRAM_END_ADDRESS 0x01FFFFFF
    #define NO_NO_O_OP_RAM_LOC 512
    #define SDRAM_MAPPING ADDRESS 0x60000000
    #define SysTK_MAX_COUNT 16777216

    /* UDMA 控制器使用的控制表。 此表必须对齐
    1024字节边界。 *
    #if defined (__ICCARM __)
    #pragma DATA_alignment=1024
    uint8_t pui8ControlTable[1024];
    #Elif defined (_TI_ARM_)
    #pragma DATA_ALIGN (pui8ControlTable、1024)
    uint8_t pui8ControlTable[1024];
    其他
    uint8_t pui8ControlTable[1024]__attribute__(aligned (1024)));
    #endif

    /*全局变量*/
    uint32_t internalWriteBuf[no_of _RAM_LOC];
    uint32_t internalReadBuf[no_of _RAM_LOC];
    bool setTransmitDone = false;
    bool setReceiveDone = false;

    空 EPI0_IRQHandler (空)

    uint32_t getIntStatus;

    /*获取中断状态*/
    getIntStatus = MAP_EPIIntStatus (EPI0_BASE、TRUE);

    if ((getIntStatus & EP_INT_DMA_TX_DONE)== EP_INT_DMA_TX_DONE)

    /*清除中断状态并将主代码的标志设置为
    *继续*/
    MAP_EPIIntErrorClear (EPI0_BASE、EPI_INT_ERR_DMAWRIC);
    setTransmitDone =真;

    if ((getIntStatus & EP_INT_DMA_RX_DONE)== EP_INT_DMA_RX_DONE)

    /*清除中断状态并将主代码的标志设置为
    *继续*/
    MAP_EPIIntErrorClear (EPI0_BASE、EPI_INT_ERR_DMARDIC);
    setReceiveDone = true;

    空配置 UART (uint32_t 系统时钟)

    /*启用到 GPIO 端口 A 和 UART 0的时钟*/
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);

    /*为 UART 0配置 GPIO 端口 A */
    MAP_GPIOPinConfigure (GPIO_PA0_U0RX);
    MAP_GPIOPinConfigure (GPIO_PA1_U0TX);
    MAP_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);

    /*将 UART 配置为115200bps 8-N-1格式*/
    UARTStdioConfig (0、115200、系统时钟);

    int main (空)

    uint32_t systemClock;
    uint32_t ii;
    uint32_t getStartTime、getEndTime;
    uint32_t systemClockinMHz;
    uint32_t * swam32bitAddrPointer;
    bool setDataCheck = false;

    /*将系统时钟配置为120 MHz */
    系统时钟= MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、
    120000000);

    /*初始化串行控制台*/
    ConfigureUART (systemClock);

    /*启用 EPI 所需的 GPIO 端口时钟*
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOH);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP);

    MAP_GPIOPinConfigure (GPIO_PH0_EPI0S0);  
    MAP_GPIOPinConfigure (GPIO_PH1_EPI0S1);
    MAP_GPIOPinConfigure (GPIO_PH2_EPI0S2);
    MAP_GPIOPinConfigure (GPIO_PH3_EPI0S3);
    MAP_GPIOPinConfigure (GPIO_PC7_EPI0S4);
    MAP_GPIOPinConfigure (GPIO_PC6_EPI0S5);
    MAP_GPIOPinConfigure (GPIO_PC5_EPI0S6);
    MAP_GPIOPinConfigure (GPIO_PC4_EPI0S7);
    MAP_GPIOPinConfigure (GPIO_PA6_EPI0S8);
    MAP_GPIOPinConfigure (GPIO_PA7_EPI0S9);
    MAP_GPIOPinConfigure (GPIO_PG1_EPI0S10);
    MAP_GPIOPinConfigure (GPIO_PG0_EPI0S11);
    MAP_GPIOPinConfigure (GPIO_PM3_EPI0S12);
    MAP_GPIOPinConfigure (GPIO_PM2_EPI0S13);
    MAP_GPIOPinConfigure (GPIO_PM1_EPI0S14);
    MAP_GPIOPinConfigure (GPIO_PM0_EPI0S15);
    MAP_GPIOPinConfigure (GPIO_PL0_EPI0S16);
    MAP_GPIOPinConfigure (GPIO_PL1_EPI0S17);
    MAP_GPIOPinConfigure (GPIO_PL2_EPI0S18);
    MAP_GPIOPinConfigure (GPIO_PL3_EPI0S19);
    MAP_GPIOPinConfigure (GPIO_PB3_EPI0S28);
    MAP_GPIOPinConfigure (GPIO_PP2_EPI0S29);
    MAP_GPIOPinConfigure (GPIO_PP3_EPI0S30);
    MAP_GPIOPinConfigure (GPIO_PK5_EPI0S31);

    MAP_GPIOPinTypeEPI (GPIO_Porta_base、(GPIO_PIN_7 | GPIO_PIN_6));
    MAP_GPIOPinTypeEPI (GPIO_PORTB_BASE、(GPIO_PIN_3));
    MAP_GPIOPinTypeEPI (GPIO_PORTC_BASE、(GPIO_PIN_7 | GPIO_PIN_6 | GPIO_PIN_5 |
    GPIO_PIN_4));
    MAP_GPIOPinTypeEPI (GPIO_PORTG_BASE、(GPIO_PIN_1 | GPIO_PIN_0));
    MAP_GPIOPinTypeEPI (GPIO_Porth_BASE、(GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 |
    GPIO_PIN_0));
    MAP_GPIOPinTypeEPI (GPIO_PORTK_base、(GPIO_PIN_5));
    MAP_GPIOPinTypeEPI (GPIO_PORTL_base、(GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 |
    GPIO_PIN_0));
    MAP_GPIOPinTypeEPI (GPIO_PORTM_BASE、(GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 |
    GPIO_PIN_0));
    MAP_GPIOPinTypeEPI (GPIO_PORTP_BASE、(GPIO_PIN_3 | GPIO_PIN_2));

    /*启用 EPI 的时钟并等待其就绪*/
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_EPI0);
    while (!(map_SysCtlPeripheralReady (SYSCTL_Periph_EPI0)))

    /*将 EPI 配置为以60 MHz 的频率访问 SDRAM 存储器设置 EPI
    将系统时钟减半。 *
    MAP_EPIDividerSet (EPI0_BASE、1);

    /*设置 EPI 模块的使用模式。 在本示例中、我们将使用
    * SDRAM 模式,用于与外部64MB SDRAM 子卡进行通信。 *
    MAP_EPImodeSet (EPI0_BASE、EPI_MODE_SDRAM);

    /*配置 SDRAM 模式。 我们根据内核配置 SDRAM
    *时钟频率。 我们将使用正常(或全功率)操作
    *状态、这意味着我们不会使用低功耗自刷新状态。
    *将 SDRAM 大小设置为64MB,刷新间隔为468个时钟周期*/
    MAP_EPIConfigSDRAMSet (EPI0_BASE、(EPI_SDRAM_CORE_FREQ_50_100 |
    EP_SDRAM_FUL_POWER |
    EP_SDRAM_SIZE _512Mbit)、468);

    /*设置地址映射。 EPI0从0x60000000映射到0x01FFFFFF。
    *在本示例中、我们将从0x60000000的基地址开始
    *大小为256MB。 尽管我们的 SDRAM 只有64MB、但没有64MB
    *孔径选项、因此我们选择下一个较大的尺寸。 *
    MAP_EPIAddressMapSet (EPI0_BASE、EPI_ADDR_RAM_SIZE = 256MB | EPI_ADDR_RAM_BASE_6);

    /*通过轮询 SDRAM 等待 SDRAM 唤醒完成
    *初始化序列位。 当 SDRAM 接口为真时该位为真
    正在进行初始化、SDRAM 接口为 false
    *它不在唤醒周期内。 *
    while (EPI0->STAT 和 EPI_STAT_INITSEQ)

    /*将 EPI 存储器指针设置为 EPI 存储器空间的底座。 请注意
    * swam32bitAddrPointer 被声明为易失性、因此编译器不应
    *优化内存的读出。 使用该指针、即存储器空间
    *的访问方式与简单的数组类似。 *
    sdram32bitAddrPointer =(uint32_t *) SDRAM_MAPPING 地址;

    /*读取 SDRAM 中的初始数据,并将其显示在控制台上。 *
    UARTprintf (" SDRAM 初始数据:\n");
    UARTprintf (" Mem[0x6000.0000]= 0x%8x\n"、
    sdram32bitAddrPointer[SDRAM_START_ADDRESS]);
    UARTprintf (" Mem[0x603F.FFFFFFF]= 0x%8x\n\n"、
    sdram32bitAddrPointer[SDRAM_END_ADDRESS]);

    /*显示我们在控制台上执行的写入操作。 *
    UARTprintf (" SDRAM 写入:\n");
    UARTprintf (" Mem[0x6000.0000]<- 0xabcd1234\n");
    UARTprintf (" Mem[0x603F.FFFFFFFFF]<- 0x4321dcba\n\n");

    /*写入 SDRAM 卡的前2个和后2个地址。 自以来
    * SDRAM 卡可按字寻址、我们将编写字。 *
    sdram32bitAddrPointer[SDRAM_START_ADDRESS]= 0xabcd1234;
    sdram32bitAddrPointer[SDRAM_END_ADDRESS]= 0x4321dcba;

    /*读回您写入的数据,并将其显示在控制台上。 *
    UARTprintf (" SDRAM 读取:\n");
    UARTprintf (" Mem[0x6000.0000]= 0x%8x\n"、
    sdram32bitAddrPointer[SDRAM_START_ADDRESS]);
    UARTprintf (" Mem[0x603F.FFFFFFF]= 0x%8x\n\n"、
    sdram32bitAddrPointer[SDRAM_END_ADDRESS]);

    /*检查数据的完整性。 *
    if ((sdram32bitAddrPointer[SDRAM_START_ADDRESS]= 0xabcd1234)&&
    (sdram32bitAddrPointer[SDRAM_END_ADDRESS]= 0x4321dcba)

    /*读取和写入操作成功。 返回时没有错误。
    ***/
    UARTprintf ("对外部 SDRAM 的读取和写入操作成功!\n");
    UARTprintf ("开始性能测试!\n");

    其他

    /*在控制台上显示有错误。 *
    UARTprintf ("读取和/或写入失败!");
    UARTprintf ("检查 SDRAM 卡是否已插入。");
    返回(0);

    /*使用随机数据更新内部写入缓冲区并清除内部
    *读取缓冲区*/
    对于(ii = 0;ii < NO_NO_O_O_RAM_LOC;i++)

    internalWriteBuf[i]=rand()|(rand()<<16);
    internalReadBuf[i]=0x0;

    /*为 EPI 配置写和读路径 DMA 请求。 TX FIFO 是
    *配置为在有2个可用位置时生成请求。
    *当 NBR FIFO 中的4个字半满时配置 RX FIFO。*/
    MAP_EPIFOConfig (EPI0_BASE、EPI_FIFO_CONFIG_TX_1_4 |
    EPI_FIFO_CONFIG_RX_1_2);

    MAP_EPINONBlockingReadConfigure (EPI0_BASE、0、EPI_NbCONFIG_SIZE、
    0x60000000);

    MAP_EPIIntEnable (EPI0_BASE、(EP_INT_DMA_TX_DONE | EP_INT_DMA_RX_DONE));

    MAP_IntEnable (INT_EPI0);

    /*在的基本模式下为 EPI TX 和 RX 启用 DMA 和配置通道
    *传输*/
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_UDMA);
    while (!(SysCtlPeripheralReady (SYSCTL_Periph_UDMA)))

    map_uDMAEnable();

    /*指向控制表以用于通道控制结构体。 *
    map_uDMAControlBaseSet (pui8ControlTable);

    /*映射 EPI RX 和 TX DMA 通道*/
    MAP_uDMAChannelAssign (UDMA_CH20_EPI0RX);
    MAP_uDMAChannelAssign (UDMA_CH21_EPI0TX);

    /*将 uDMA EPI TX 通道的属性置于已知状态。 这些
    默认情况下应已禁用*。 *
    MAP_uDMAChannelAttributeDisable (UDMA_CH21_EPI0TX、
    UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
    UDMA_ATTR_HIGH_PRIOR|
    UDMA_ATTR_REQMASK);

    /*为配置主控制结构体的控制参数
    * EPI TX 通道。 主控制结构体用于复制
    *从内部缓冲器到 SDRAM 内存的数据。 传输数据大小
    *为32位、源地址和目标地址递增。 *
    MAP_uDMAChannelControlSet (UDMA_CH21_EPI0TX | UDMA_PRI_SELECT、
    UDMA_SIZE_32 | UDMA_SRC_INC_32 | UDMA_DST_INC_32 |
    UDMA_ARB_2);

    /*设置 EPI TX 交替控制的传输参数
    *结构。 模式为基本模式、因此它将运行至完成。 *
    MAP_uDMAChannelTransferSet (UDMA_CH21_EPI0TX | UDMA_PRI_SELECT、
    UDMA_MODE_BASIC、
    (void *)&internalWriteBuf、(void *) swam32bitAddrPointer、
    sizeof (internalWriteBuf)/4);

    /*将 uDMA EPI RX 通道的属性置于已知状态。 这些
    默认情况下应已禁用*。 *
    MAP_uDMAChannelAttributeDisable (UDMA_CH20_EPI0RX、
    UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
    UDMA_ATTR_HIGH_PRIOR|
    UDMA_ATTR_REQMASK);

    /*为的替代控制结构配置控制参数
    * EPI RX 通道。 主控制结构体用于复制
    *从 EPIRADDR0到内部缓冲区的数据。 传输数据大小为32
    *位和源地址不会递增、目标地址为
    *递增。 *
    MAP_uDMAChannelControlSet (UDMA_CH20_EPI0RX | UDMA_PRI_SELECT、
    UDMA_SIZE_32 | UDMA_SRC_INC_NONE | UDMA_DST_INC_32 |
    UDMA_ARB_4);

    /*设置 EPI RX 主控制结构体的传输参数。
    *模式为基本模式,因此它将运行至完成。 *
    MAP_uDMAChannelTransferSet (UDMA_CH20_EPI0RX | UDMA_PRI_SELECT、
    UDMA_MODE_BASIC、
    (void *)&EPI0->READFIFO0、(void *)&internalReadBuf、
    sizeof (internalReadBuf)/4);

    /* UDMA EPI RX 和 TX 通道被作为启动传输的信号。 请尽快
    *当通道启用且 EPI TX 或 RX 计数已编程时、EPI
    *将发出 DMA 请求、数据传输将开始。 *
    MAP_uDMAChannelEnable (UDMA_CH20_EPI0RX);
    MAP_uDMAChannelEnable (UDMA_CH21_EPI0TX);

    /*计算系统频率,并调整 MHz 字段以适应吞吐量
    *计算*/
    systemClockkinMHz = systemClock/1000000;

    /*初始化和启用 SysTick 计时器*/
    MAP_SysTickPeriodSet (SysTick MAX_COUNT);
    map_SysTickEnable();

    /*获取开始计数*/
    getStartTime = map_SysTickValueGet ();

    /*开始从内部缓冲区写入外部 SDRAM */
    MAP_EPIDMATxCount (EPI0_BASE、NO_OV_RAM_LOC);

    /*等待 DMA 的 TX 完成中断获取结束计数*/
    while (!(setTransmitDone))


    getEndTime = map_SysTickValueGet ();

    UARTprintf ("32位 SDRAM-DMA 写入:%03d.%03d Mbps\n"、
    ((no_of _RAM_LOC*systemClockinMHz*4)/(getStartTime-getEndTime))、
    ((no_of _RAM_LOC*systemClockinMHz*4)%(getStartTime-getEndTime));

    /*获取开始计数*/
    getStartTime = map_SysTickValueGet ();

    /*开始从内部缓冲区写入外部 SDRAM */
    MAP_EPINONBlockingReadStart (EPI0_BASE、0、NO_OD_RAM_LOC);

    /*等待 DMA 的 TX 完成中断获取结束计数*/
    while (!(setReceiveDone))


    getEndTime = map_SysTickValueGet ();

    UARTprintf ("32位 SDRAM-DMA 读取:%03d.%03d Mbps\n"、
    ((no_of _RAM_LOC*systemClockinMHz*4)/(getStartTime-getEndTime))、
    ((no_of _RAM_LOC*systemClockinMHz*4)%(getStartTime-getEndTime));

    /*执行数据完整性检查*/
    对于(ii = 0;ii < NO_NO_O_O_RAM_LOC;i++)

    if (internalWriteBuf[ii)!= internalReadBuf[ii)

    UARTprintf ("数据完整性检查失败!!!!!!\n");
    setDataCheck = true;
    中断;

    if (!setDataCheck)

    UARTprintf ("通过数据完整性检查\n"\n);

    while (1)


    /********* 结束 /

    上面是我正在使用的 MSP432E401Y SDK 的示例代码、并且在我们的定制板中只更改了一个引脚。  

    IE:GPIO_PH0_EPI0S0至 GPIO_PK0_EPI0S0。  

    我根据 GPIO_PK0_EPI0S0修改了 EPIO 配置。

    如果我们对 EPIO 总线使用不同的 GPIO、是否需要对 SDRAM EPI 总线的内部驱动器进行任何更改?

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

    您好!  

     将 EPI0S0更改为 PK0后、会发生什么情况? 我在更改后无法清楚地看到您的结果、因为已将帖子标记为已解决。 请提供:

     -当您使用原始示例代码(例如使用 GPIO_PH0_EPI0S0)时、SDRAM 是否正常工作?

     -运行原始代码时,您是否在 PH0上看到任何信号?

     -当您修改代码(例如更改为 GPIO_PK0_EPI0S0)时、SDRAM 是否正常工作?

     -  运行修改后的代码时,您是否在 PK0上看到任何信号?

      

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

    尊敬的 蔡先生:

    使用原始示例代码(例如使用 GPIO_PH0_EPI0S0)时、SDRAM 是否正常工作?

    ANS:使用 给定的示例代码、SDRAM 无法与 GPIO_PH0_EPI0S0配合使用。 在我们的定制板中进行更改之后。

    IE:将 EPI0S0引脚连接到 PH0、而不是 PK0。

    SDRAM 的读写数据不正确。

     2.运行原始代码时,PH0上是否出现任何信号?

    答案:需要进行测试。

     3、修改代码(例如更改为  GPIO_PK0_EPI0S0)时 SDRAM 是否正常工作?

    ANS:使用 给定的示例代码、SDRAM 与 GPIO_PK0_EPI0S0不能正常工作。

     GPIO 配置从 GPIO_PH0_EPI0S0更改为 GPIO_PK0_EPI0S0代码后。

    IE: SDRAM 写入和读取数据不正确。

    2. 我在写入和读取操作期间得到的以下结果。

    读取 Mem[0]= 0x 8040
    读取 Mem[1]= 0x AA55
    读取 Mem[2]= 0x aa57
    读取 Mem[3]= 0x aa57
    读取 Mem[4]= 0x AA55


    写入 Mem[0]= 0x FFFF
    写入 Mem[1]= 0x FFFF
    写入 Mem[2]= 0x FFFF
    写入 Mem[3]= 0x FFFF
    写入 Mem[4]= 0x FFFF


    读取 Mem[0]= 0x 8040
    读取 Mem[1]= 0x AA55
    读取 Mem[2]= 0x aa57
    读取 Mem[3]= 0x aa57
    读取 Mem[4]= 0x AA55

     4:  运行修改后的代码时,您是否在 PK0上看到任何信号?

    ANS:是、在 SDRAM 写入操作期间、所有线路 EPI0S0-EPI0S15上都存在尖峰脉冲 。

    我们发现 即使 在不执行 SDRAM 写操作和读操作时、SDRAM CLK 和 CS 信号也是如此。  

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

    您好!

     您似乎正在运行 EPI_SDRAM_dmareq.c 示例、对吧? 为什么不先尝试 EPI_SDRAM_BASEC.c? 我建议您也尝试我为 TM4C129 MCU 连接的示例。  

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

    您好!

    我发现两个示例代码 EPI 配置相同。  

    DMA 仅包含在基本示例代码中、并且 RAM 位置不存在。

    我将运行它并告知您。

    1.目前我没有使用 DMA,我试图在启动 几个 RAM 位置时执行 SDRAM 写操作和读操作。 这在两个示例代码中都很常见。

     2.我们发现 SDRAM CLK 和 CS 信号即使在不执行 SDRAM 写操作时也是如此?

    此致、

    Naga Narasimha Rao P

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

    您好!

    [引用 userid="526381" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189331/msp432e411y-bgaevm-epi-bus-gpio-pin-change-for-sdram/4485169 #4485169]1. 目前我没有使用 DMA、我尝试在启动 几个 RAM 位置时执行 SDRAM 写入和读取操作。 这在两个示例代码中都很常见。

     我想您看到的是 SDRAM 初始化。  

    16.4.2 SDRAM 模式
    激活 SDRAM 模式时、必须考虑以下几点:
    •μs 情况下、从激活模式到允许首次操作、所需时间超过100 μ s。
    一旦选择了模式和、SDRAM 控制器就会开始 SDRAM 初始化序列
    通过 EPICFG 寄存器使能。 在之前正确配置 GPIO 非常重要
    SDRAM 模式启用、因为 EPI 控制器依赖 GPIO 模块驱动管脚的能力
    一个示例。 作为初始化序列的一部分、加载模式寄存器命令为
    自动发送到 SDRAM、值为0x27、设置 CAS 延迟2和完整页
    突发长度。

    [引用 userid="526381" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189331/msp432e411y-bgaevm-epi-bus-gpio-pin-change-for-sdram/4485169 #4485169"]

     2.我们发现 SDRAM CLK 和 CS 信号即使在不执行 SDRAM 写操作时也是如此?

    [/报价]

    我认为自由运行时钟应该可以。 如果您看上面的时序图、在将 EPI 初始化为 SDRAM 模式后、时钟就会出现。 CS 应由 MCU 控制、但在初始化完成之前、因为 CS 处于高阻抗状态。  根据数据表、建议在 CS 上使用外部上拉或下拉电阻、以便在 SDRAM 初始化完成之前、当 CS 悬空时 SDRAM 器件不会出现误解。   

    以下各小节介绍了每个运行模式的初始化和配置。
    正确初始化所有内容以确保正确操作。 GPIO 状态的控制也很重要、如所示
    更改可能会导致外部器件将引脚状态解释为操作或命令(请参阅)。 通常是 A
    电路板上需要上拉或下拉、以至少控制作为 GPIO 的芯片选择或芯片使能
    从高阻抗复位中退出。

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

    尊敬的 蔡先生:

     感谢您的回复、我们会按照您所说的方式进行更改。

      >> CS 应由 MCU 控制,但在初始化完成之前,因为 CS 处于高阻抗状态。

    在 SDRAM 初始化之前、是否有任何 API 调用来控制 EPI 接口的 CS?

    此致、

    Naga Narasimha Rao P

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

    您好、Naga、

     复位后、在 SDRAM 初始化之前、连接到 PN2的 CS 引脚处于 GPIO 输入模式。 换言之、当引脚处于输入模式时、它处于高阻抗状态。 引脚上应该有一个外部拉电阻器、这样 SDRAM 器件就不会识别引脚上的随机状态 、而该状态可能 会误认为是有效的事务。  

     我还建议您使用库存示例尝试使用 LaunchPad 板连接 SDRAM 器件。  

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

    尊敬的蔡先生:

    连接到 PN2的 CS 引脚处于 GPIO 输入模式

    ANS:我们不使用 PN2作为 CS、以下是 PIN 在我们的定制板中连接到 SDRAM。

    >我们的定制板中只有一个引脚更改。

    IE:与(示例 SDRMA 代码 MSP432E40IY SDK)相比、第一个引脚 GPIO_PH0_EPI0S0。  

    2.将 GPIO_PH0_EPI0S0更改为 GPIO_PK0_EPI0S0时,是否正常?  

    3. 下面是配置的 SDRAM 初始化代码。 (使用 PLL 时 MCU SYSCLK 为120MHz)

    /*启用 EPI 所需的 GPIO 端口时钟*

    /*启用 EPI 的时钟并等待其就绪*/
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_EPI0);
    while (!(ROM_SysCtlPeripheralReady (SYSCTL_Periph_EPI0)))

    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOH);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP);

    ROM_GPIOPinConfigure (GPIO_PK0_EPI0S0);//更改引脚配置
    ROM_GPIOPinConfigure (GPIO_PH1_EPI0S1);
    ROM_GPIOPinConfigure (GPIO_PH2_EPI0S2);
    ROM_GPIOPinConfigure (GPIO_PH3_EPI0S3);
    ROM_GPIOPinConfigure (GPIO_PC7_EPI0S4);
    ROM_GPIOPinConfigure (GPIO_PC6_EPI0S5);
    ROM_GPIOPinConfigure (GPIO_PC5_EPI0S6);
    ROM_GPIOPinConfigure (GPIO_PC4_EPI0S7);
    ROM_GPIOPinConfigure (GPIO_PA6_EPI0S8);
    ROM_GPIOPinConfigure (GPIO_PA7_EPI0S9);
    ROM_GPIOPinConfigure (GPIO_PG1_EPI0S10);
    ROM_GPIOPinConfigure (GPIO_PG0_EPI0S11);
    ROM_GPIOPinConfigure (GPIO_PM3_EPI0S12);
    ROM_GPIOPinConfigure (GPIO_PM2_EPI0S13);
    ROM_GPIOPinConfigure (GPIO_PM1_EPI0S14);
    ROM_GPIOPinConfigure (GPIO_PM0_EPI0S15);
    ROM_GPIOPinConfigure (GPIO_PL0_EPI0S16);
    ROM_GPIOPinConfigure (GPIO_PL1_EPI0S17);
    ROM_GPIOPinConfigure (GPIO_PL2_EPI0S18);
    ROM_GPIOPinConfigure (GPIO_PL3_EPI0S19);
    ROM_GPIOPinConfigure (GPIO_PB3_EPI0S28);
    ROM_GPIOPinConfigure (GPIO_PP2_EPI0S29);// CS 引脚
    ROM_GPIOPinConfigure (GPIO_PP3_EPI0S30);
    ROM_GPIOPinConfigure (GPIO_PK5_EPI0S31);


    MAP_GPIOPinTypeEPI (GPIO_Porta_base、(GPIO_PIN_7 | GPIO_PIN_6));
    MAP_GPIOPinTypeEPI (GPIO_PORTB_BASE、(GPIO_PIN_3));
    MAP_GPIOPinTypeEPI (GPIO_PORTC_BASE、(GPIO_PIN_7 | GPIO_PIN_6 | GPIO_PIN_5 |
    GPIO_PIN_4));
    MAP_GPIOPinTypeEPI (GPIO_PORTG_BASE、(GPIO_PIN_1 | GPIO_PIN_0));
    MAP_GPIOPinTypeEPI (GPIO_Porth_BASE、(GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1));

    MAP_GPIOPinTypeEPI (GPIO_PORTK_base、(GPIO_PIN_5|GPIO_PIN_0));

    MAP_GPIOPinTypeEPI (GPIO_PORTL_base、(GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 |
    GPIO_PIN_0));
    MAP_GPIOPinTypeEPI (GPIO_PORTM_BASE、(GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 |
    GPIO_PIN_0));
    MAP_GPIOPinTypeEPI (GPIO_PORTP_BASE、(GPIO_PIN_3 | GPIO_PIN_2));

    /**SDRAM 初始化******** /

    /*将 EPI 配置为以60 MHz 的频率访问 SDRAM 存储器设置 EPI
    将系统时钟减半。 *
    ROM_EPIDividerSet (EPI0_BASE、1);

    /*设置 EPI 模块的使用模式。 在本示例中、我们将使用
    * SDRAM 模式,用于与外部64MB SDRAM 子卡进行通信。 *
    ROM_EPImodeSet (EPI0_BASE、EPI_MODE_SDRAM);

    /*配置 SDRAM 模式。 我们根据内核配置 SDRAM
    *时钟频率。 我们将使用正常(或全功率)操作
    *状态、这意味着我们不会使用低功耗自刷新状态。
    *将 SDRAM 大小设置为64MB,刷新间隔为468个时钟周期*/
    ROM_EPIConfigSDRAMSet (EPI0_BASE、(EPI_SDRAM_CORE_FREQ_50_100 |
    EP_SDRAM_FUL_POWER |
    EPI_SDRAM_SIZE 512Mbit)、
    468);

    /*设置地址映射。 EPI0从0x60000000映射到0x01FFFFFF。
    *在本示例中、我们将从0x60000000的基地址开始
    *大小为256MB。 尽管我们的 SDRAM 只有64MB、但没有64MB
    *孔径选项、因此我们选择下一个较大的尺寸。 *
    ROM_EPIAddressMapSet (EPI0_BASE、
    EPI_ADDR_RAM_SIZE | EPI_ADDR_RAM_BASE_6);

    /*通过轮询 SDRAM 等待 SDRAM 唤醒完成
    *初始化序列位。 当 SDRAM 接口为真时该位为真
    正在进行初始化、SDRAM 接口为 false
    *它不在唤醒周期内。 *
    while (EPI0->STAT 和 EPI_STAT_INITSEQ)

    /*将 EPI 存储器指针设置为 EPI 存储器空间的底座。 请注意
    * swam32bitAddrPointer 被声明为易失性、因此编译器不应
    *优化内存的读出。 使用该指针、即存储器空间
    *的访问方式与简单的数组类似。 *
    swam16bitAddrPointer =(uint16_t *) 0x60000000;
    swam32bitAddrPointer =(uint32_t *) 0x60000000;
    swam64bitAddrPointer =(uint64_t *) 0x60000000;

    smram32bitAddrPointer[0]= 0x12345678;

    此致、

    Naga Narasimha Rao P

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

    您好!

    [引用 userid="526381" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189331/msp432e411y-bgaevm-epi-bus-gpio-pin-change-for-sdram/4486846 #4486846"]

    连接到 PN2的 CS 引脚处于 GPIO 输入模式

    ANS:我们不使用 PN2作为 CS、以下是 PIN 在我们的定制板中连接到 SDRAM。

    >我们的定制板中只有一个引脚更改。

    IE:与(示例 SDRMA 代码 MSP432E40IY SDK)相比、第一个引脚 GPIO_PH0_EPI0S0。  

    [/报价]

     PN2和 PP2引脚均可用于处于 SDRAM 模式的 CS EPI029的多路复用。 相同的注释将应用于 PP2 -默认情况下、它是复位后的 GPIO 输入引脚。 您需要在 PP2上使用拉电阻器。  

    [引用 userid="526381" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189331/msp432e411y-bgaevm-epi-bus-gpio-pin-change-for-sdram/4486846 #4486846"]2. 将 GPIO_PH0_EPI0S0更改为 GPIO_PK0_EPI0S0时,是否正常?  [/报价]

    这是可以的、因为 EPI0S0可以同时出现在 PH0或 PK0上。 您还说您看到的信号来自 PK0。 这意味着它在 PK0上工作。

    [引用 userid="526381" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189331/msp432e411y-bgaevm-epi-bus-gpio-pin-change-for-sdram/4486846 #4486846"]3.  下面是我配置的 SDRAM 初始化代码。 (使用 PLL 时 MCU SYSCLK 为120MHz)[/QUERP]

    您可以试用 LaunchPad 吗?

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

    尊敬的蔡先生:

     感谢您的回复、我们将按照所述进行更改并告知您。

    1.您可以尝试一下 Launchpad 吗?

    答: 目前我们 没有 launchpad、它有 SDRAM 可供试用。

    此致、

    Naga Narasimha Rao P

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

    尊敬的蔡先生:

    1.按照您的建议为 CS 引脚添加上拉电阻后、我们没有发现 SDRAM 写入和读取操作有任何变化。

    2.静止 CS 引脚在理想状态下切换?

    3. EPI 到 SDRAM 的指令是否处于理想状态?

    4.以下 参数定义 EPI 总线工作频率?

    EP_SDRAM_CORE_FREQ_50_100 将内核时钟定义为50MHz < clk <= 100MHz。

    5、以下计算是否正确?   

    ->根据数据表、以下公式使用了窗体刷新计数。

    ->我当前 的 MSP432E401Y MCU 配置如下:

    MCU 系统时钟120MHz

    RFSH =  468

    EPI CLK = 60MHz

    EXT_CLOCK_PERIOD_Δ I = EPI CLK μs。  // 60 MHz

    Number_rows = 4096 //(A0-A12)

    tRefresh_us = 64000us

    RFSH≤μs (tRefresh_us/ number_rows)/ ext_clock_Period_M Ω。

    RFSH = 937最大计数。

    (SDRAM 示例给出的   频率为 RFSH = 468时钟节拍、MCU CLK 为120 MHz、MCU EPI CLK 为60 MHz)。

     我们将在定制板的512M 位中使用以下 SDRAM  

     部件号:IS42S86400F-7TLI

    6.是否有任何工具可用于微调 TI 特定 SDRAM 接口的 EPI SDRAM 配置时序脉冲。
    7.除 SDRAM 基本示例代码外,是否还需要进行其他配置?

    8。  是否可以  安排与 TI 团队的任何现场窃听会话、我们需要的除 TI 论坛之外的其他 SDRAM 支持更多。
    Naga Narasimha Rao P

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

    您好、Naga、

    [引用 userid="526381" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189331/msp432e411y-bgaevm-epi-bus-gpio-pin-change-for-sdram/4496733 #4496733"]

    1.按照您的建议为 CS 引脚添加上拉电阻后、我们没有发现 SDRAM 写入和读取操作有任何变化。

    2.静止 CS 引脚在理想状态下切换?

    [/报价]

    即使 CS 处于活动状态、也可以仅使用 NOP 命令。 因此、请检查命令是否为 NOP。  

    [引用 userid="526381" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189331/msp432e411y-bgaevm-epi-bus-gpio-pin-change-for-sdram/4496733 #4496733"]

    3. EPI 到 SDRAM 的指令是否处于理想状态?

    [/报价]

    CS 可能处于活动状态、但该命令可能只是 NOP。 在这种情况下、它是"无"操作。 请参阅下面的 ISSI 数据表。  

    [引用 userid="526381" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189331/msp432e411y-bgaevm-epi-bus-gpio-pin-change-for-sdram/4496733 #4496733"]4. 以下 参数定义 EPI 总线工作频率?

    示例代码是为60MHz SDRAM 操作而设计的。 如果您遵循该示例、则参数应正确。  

    [引用 userid="526381" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189331/msp432e411y-bgaevm-epi-bus-gpio-pin-change-for-sdram/4496733 #4496733"]6. 是否有任何工具可用于针对 TI 的特定 SDRAM 接口微调 EPI SDRAM 配置时序脉冲。[/QUERP]

    没有我知道的这样的工具。 请使用该示例进行参考。  

    [引用 userid="526381" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189331/msp432e411y-bgaevm-epi-bus-gpio-pin-change-for-sdram/4496733 #4496733"]7. 除 SDRAM 基本示例代码外,是否还需要进行其它配置?
    [/报价]

    该示例是最佳参考。 我还将向您介绍 TM4C129的另一个示例。 如前所述、TM4C129和 MSP432E4是相同的器件。 EPI 是相同的。 您可以在 前面的帖子中找到我附加的 TM4C129 SDRAM 示例。  

    我还发现 TI 采用 SDRAM 的 TM4C129参考设计可能会有所帮助。 请参阅以下链接。  

    https://www.ti.com/tool/TIDM-TM4C129SDRAMNVM

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

    尊敬的蔡先生:

    1. CAS 和 RAS 会定期切换7.64us,是否有任何命令(如“自动/自刷新”命令)正在理想状态下发送?

    配置 SDRAM 后、EPI 模块周期性地以理想状态向 SDRAM 发送哪些命令?  

    此致、

    Naga Narasimha Rao P

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

    您好!

    当您不对 SDRAM 进行读写操作时、自动刷新功能会自动启动。 这是为了确保正确地为 SDRAM 的内容充电和维护。 7.6us 看起来是合理的。  请查看您的逻辑分析仪捕获和解码、以查看命令是否为自动刷新。 与下面的"自刷新"表进行比较。  

    在数据表中、它显示了50MHz SDRAM 操作的每次刷新时间为15us。 由于您以60MHz 运行、因此较低的刷新周期(7.6uS)是合理的。