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/TM4C129ENCPDT:EPI SRAM 接口

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/826927/ccs-tm4c129encpdt-epi-sram-interface

器件型号:TM4C129ENCPDT

工具/软件:Code Composer Studio

您好!

我们将 TM4C129ENCPDT 与 CY14B108K NVRAM 配合使用。 我们制作了一个连接控制器和 NVRAM IC 的 PCB 原型。 根据 EPI 外设的主机总线模式(8位)进行连接。 在软件方面、我不知道如何 访问存储器来读取和写入数据 、但我按照外设驱动程序库数据表中的示例代码执行了 EPI 配置部分。

CY14B108K NVRAM 具有1 MB (1024K x 8)内存。 因此需要20条地址线路和8条数据线路。 地址线的 LSB 8位与数据线复用。 因此、D 锁存寄存器 IC 用于解锁多路复用器地址和数据、该地址和数据由 EPI 外设的 ALE 信号控制。   

//地址数据位(AD0至 AD7)和剩余行(A8至 A19)的复用8位

MAP_GPIOPinConfigure (GPIO_PK0_EPI0S0);
GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_0);//AD0
MAP_GPIOPinConfigure (GPIO_PK1_EPI0S1);
GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_1);//AD1
MAP_GPIOPinConfigure (GPIO_PK2_EPI0S2);
GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_2);//AD2
MAP_GPIOPinConfigure (GPIO_PK3_EPI0S3);
GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_3);//AD3
MAP_GPIOPinConfigure (GPIO_PC7_EPI0S4);
GPIOPinTypeEPI (GPIO_PORTC_BASE、GPIO_PIN_7);//AD4
MAP_GPIOPinConfigure (GPIO_PC6_EPI0S5);
GPIOPinTypeEPI (GPIO_PORTC_BASE、GPIO_PIN_6);//AD5
MAP_GPIOPinConfigure (GPIO_PC5_EPI0S6);
GPIOPinTypeEPI (GPIO_PORTC_BASE、GPIO_PIN_5);//AD6
MAP_GPIOPinConfigure (GPIO_PC4_EPI0S7);
GPIOPinTypeEPI (GPIO_PORTC_BASE、GPIO_PIN_4);//AD7 
MAP_GPIOPinConfigure (GPIO_PA6_EPI0S8); GPIOPinTypeEPI (GPIO_Porta_base、GPIO_PIN_6);//A8 MAP_GPIOPinConfigure (GPIO_PA7_EPI0S9); GPIOPinTypeEPI (GPIO_Porta_base、GPIO_PIN_7);//A9 MAP_GPIOPinConfigure (GPIO_PG1_EPI0S10); GPIOPinTypeEPI (GPIO_PORTG_base、GPIO_PIN_1);//A10 MAP_GPIOPinConfigure (GPIO_PG0_EPI0S11); GPIOPinTypeEPI (GPIO_PORTG_base、GPIO_PIN_0);//A11 MAP_GPIOPinConfigure (GPIO_PM3_EPI0S12); GPIOPinTypeEPI (GPIO_PORTM_BASE、GPIO_PIN_3);/A12 MAP_GPIOPinConfigure (GPIO_PM2_EPI0S13); GPIOPinTypeEPI (GPIO_PORTM_BASE、GPIO_PIN_2);/A13 MAP_GPIOPinConfigure (GPIO_PM1_EPI0S14); GPIOPinTypeEPI (GPIO_PORTM_BASE、GPIO_PIN_1);/A14 MAP_GPIOPinConfigure (GPIO_PM0_EPI0S15); GPIOPinTypeEPI (GPIO_PORTM_BASE、GPIO_PIN_0);//A15 MAP_GPIOPinConfigure (GPIO_PL0_EPI0S16); GPIOPinTypeEPI (GPIO_PORTL_base、GPIO_PIN_0);//A16 MAP_GPIOPinConfigure (GPIO_PL1_EPI0S17); GPIOPinTypeEPI (GPIO_PORTL_BASE、GPIO_PIN_1);/A17 MAP_GPIOPinConfigure (GPIO_PL2_EPI0S18); GPIOPinTypeEPI (GPIO_PORTL_BASE、GPIO_PIN_2);//A18 MAP_GPIOPinConfigure (GPIO_PL3_EPI0S19); GPIOPinTypeEPI (GPIO_PORTL_BASE、GPIO_PIN_3);/A19
// ACCD。 对于“HB8信号(MODE = ADMUX)”,EPI0S28被配置为 OE*,EPI0S29被配置为 WR*,EPI0S30被配置为 ALE 信号
MAP_GPIOPinConfigure (GPIO_PB3_EPI0S28);
GPIOPinTypeEPI (GPIO_PORTB_BASE、GPIO_PIN_3);//输出使能(低电平有效引脚)
MAP_GPIOPinConfigure (GPIO_PP2_EPI0S29);
GPIOPinTypeEPI (GPIO_PORTP_BASE、GPIO_PIN_2);//写入使能(低电平有效引脚)
MAP_GPIOPinConfigure (GPIO_PP3_EPI0S30);
GPIOPinTypeEPI (GPIO_PORTP_BASE、GPIO_PIN_3);// ALE 信号提供给 D 锁存寄存器 IC


/*
*以下两个引脚是2x4解码器 IC 的输入。 它的配置方式使 NVRAM IC 的 CS*引脚处于此状态
*始终保持在逻辑0
*
GPIOPinWrite (GPIO_PORTL_BASE、GPIO_PIN_4、0x00);
GPIOPinWrite (GPIO_PORTB_BASE、GPIO_PIN_2、GPIO_PIN_2);




//启用 EPI 模块。
SysCtlPeripheralEnable (SYSCTL_Periph_EPI0);
//等待 EPI 模块就绪。
while (!SysCtlPeripheralReady (SYSCTL_Periph_EPI0))
{
}
//设置 EPI 分频器。
EPIDividerSet (EPI0_BASE、0);

//选择 SDRAM 模式。
EPImodeSet (EPI0_BASE、EPI_MODE_HB8);

EPIConfigHB8Set (EPI0_BASE、
EPI_HB8_MODE_ADMUX |//设置数据和地址复用、
EP_HB8_WRWAIT_3 |//将写等待状态设置为2个 EPI 时钟。
EP_HB8_RDWAIT_3 |//将读取等待状态设置为2个 EPI 时钟。
当没有数据可供读取或写入时、EP_HB8_CLOCK_GATE _IDLE|//将 EPI 时钟保持在低电平。
EPI_HB8_CSCFG_ALE、//设置地址锁存低电平有效。
1);//如果 FIFO 就绪信号为、则等待的最大外部时钟数
//暂挂交易。

EPIAddressMapSet (EPI0_BASE、
EPI_ADDR_PER_SIZE 16MB |
EPI_ADDR_RAM_BASE_6);

while (HWREG (EPI0_BASE + EPI_O_STAT)和 EPI_STAT_INITSEQ)
{
//
//等待初始化完成。
//
} 


如果我运行代码、就不会出现任何问题。 I control 来自上述 while 环路。 但我不知道如何将数据读/写到 NVRAM IC 中。 我尝试了外设驱动程序库数据表中给出的示例代码、但无法理解。
在 EPIAddressMapSet 配置中、如果我将变量保留为 EPI_ADDR_RAM_BASE_NONE、代码将进入故障中断。 如果我将其保留为 EP_ADDR_RAM_BASE_6、则表示正常。

我的应用程序需要在 NVRAM 中写入和读取结构。
请指导我在内存中读写一个简单的数据。

感谢你能抽出时间。

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

    您好、Raghul、

    这与您所连接的存储器芯片非常具体、因此我不确定我能在多大程度上提供帮助、但我会尝试并引导我可以在哪些方面提供帮助。

    关于 EPIConfigHB8Set 配置、您有一个变量设置为 EPI_HB8_CSCFG_ALE、但芯片的 D/S 更表明它是片选、这意味着您需要 EPI_HB8_CSCFG_CS。

    关于 EPIAddressMapSet,这些注释可以更好地说明您发现该问题的原因。 请记住、您使用的是外部 RAM、因此您希望处理器具有存储器映射位置来访问数据、这意味着您需要定义的基址:

    //! 此函数用于配置外部
    //!的地址映射 接口、它随后确定外部存储器的基址或
    //! 处理器外设和/或存储器空间内的器件。
    
    //! - RAM 基地址、选择以下任一项
    ://! -\b EPI_ADDR_RAM_BASE_NONE 将 RAM 空间地址设置为 NONE。
    //! -\b EPI_ADDR_RAM_BASE_6将 RAM 空间地址设为0x60000000。
    //! -\b EPI_ADDR_RAM_BASE_8将 RAM 空间地址设为0x8000000。 

    查看存储器芯片 D/S、从它读取数据看起来有点复杂。 您是否查看过您的应用代码、认为您将正确的信号保持在正确的信号电平? 您还应该使用示波器验证信号、并且您可能需要检查存储器的时序图。

    例如、读为"CY14B108K/CY14B108M 在 CE 和 OE 为低电平、WE 和 HSB 为高电平时执行读取周期"

    因此、您应该检查所有这些信号的设置是否正确、因为您需要在 EPI 接口之外控制其中的一些信号。