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.

[参考译文] MSP432E401Y:MSP432E401Y EPI 总线初始化问题

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1417927/msp432e401y-msp432e401y-epi-bus-initialization-issue

器件型号:MSP432E401Y
主题中讨论的其他器件:AB15

工具与软件:

你好

我在 EPI 总线的初始化方面遇到问题。 该总线被配置为访问两个存储器器件。

我看到的是、在 EPI 总线初始化时、我会收到写使能信号和片选有效信号、这会导致对器件执行不必要的写入操作。

不过、还没有尝试实际对器件执行写入操作。

请参阅写使能脉冲(WR_ENn、引脚 PN2)图  

片选 CS_1n MRAM。

这是 EPI 初始化函数的代码、如果在启动时调用此函数、则会触发上述事件、从而导致对器件进行不必要的写入。

我在这里做错了什么。

int EPI_TCPIP_init (void)

INT STATUS = 1;

/*启用 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_GPION);
MAP_SysCtlPeripheralEnable (SYSCTL_PERIPH_GPIOQ);

/*基于 HW/SW ICD 的 EPI 引脚分配*/

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_PQ0_EPI0S20);// PLD Memory AB15
MAP_GPIOPinConfigure (GPIO_PQ1_EPI0S21);// PLD Memory AB16
MAP_GPIOPinConfigure (GPIO_P2_EPI0S22);// PLD Memory AB17
MAP_GPIOPinConfigure (GPIO_PQ3_EPI0S23);// PLD 存储器 AB18

MAP_GPIOPinConfigure (GPIO_PK7_EPI0S24);// EPI_BSEL0n
MAP_GPIOPinConfigure (GPIO_PK6_EPI0S25);// EPI_BSEL1n

MAP_GPIOPinConfigure (GPIO_PL4_EPI0S26);// EPI_CS0n (FPGA)。 映射到地址范围0x60000000
MAP_GPIOPinConfigure (GPIO_PB2_EPI0S27);// EPI_CS1n (MRAM)。 映射到地址范围0x

MAP_GPIOPinConfigure (GPIO_PB3_EPI0S28);// EPI_RDN

MAP_GPIOPinConfigure (GPIO_PN2_EPI0S29);// EPI_WRn

MAP_GPIOPinConfigure (GPIO_PN3_EPI0S30);// EPI_ALE

//以下信号被路由到 PLD 螺母、不计划使用
MAP_GPIOPinConfigure (GPIO_PK5_EPI0S31);// EPI_CLK*
MAP_GPIOPinConfigure (GPIO_PK4_EPI0S32);// EPI_iRDY*
MAP_GPIOPinConfigure (GPIO_PL5_EPI0S33);// EPI_CS3*
MAP_GPIOPinConfigure (GPIO_PN4_EPI0S34);// EPI_CS2*
MAP_GPIOPinConfigure (GPIO_PN5_EPI0S35);// EPI_CRE*


MAP_GPIOPinTypeEPI (GPIO_PORTA_BASE、(GPIO_PIN_7 | GPIO_PIN_6));

MAP_GPIOPinTypeEPI (GPIO_PORTB_BASE、(GPIO_PIN_3 | GPIO_PIN_2));


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_7 | GPIO_PIN_6 | GPIO_PIN_5 | GPIO_PIN_4));

MAP_GPIOPinTypeEPI (GPIO_PORTL_BASE、(GPIO_PIN_5 | GPIO_PIN_4 | 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_PORTN_BASE (GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 | GPIO_PIN_2));


/*启用到 EPI 的时钟并等待它准备就绪*/
MAP_SysCtlPeripheralEnable (SYSCTL_PERIPH_EPI0);
while (! (MAP_SysCtlPeripheralReady (SYSCTL_PERIPH_EPI0))

}

//将 EPI 配置为在120 MHz 处访问 MRAM 存储器将 EPI 时钟设置为 MRAM (120MHz)的系统时钟。
*和四分之一的系统时钟用于 FPGA(30Mhz )*/
EPIDividerSet (EPI0_BASE、3);
// EPIDividerSet (EPI0_BASE、0x00030003);//时钟速度降低30Mhz、仍然损坏

//主机总线16位接口
EPIModeSet (EPI0_BASE、EPI_MODE_HB16);

//根据 ICD 进行 HB16设置、以允许单个配置
// PLL 存储器(CS0)和 MRAM (CS1)
EPIConfigHB16Set (EPI0_BASE、
(EPI_HB16_MODE_ADMUX |
EPI_HB16_IN_READY_EN |
EPI_HB16_BSEL |
EPI_HB16_CSCFG_ALE_DUAL_CS |
EPI_HB16_CSBAUD)、
8);// PF 为0

//配置 CS0、FPGA 接口、请参阅 ICD、FPGA Works
EPIConfigHB16CSSet (EPI0_BASE、0、
(EPI_HB16_MODE_ADMUX |
EPI_HB16_WRWAIT_0 |
EPI_HB16_RDWAIT_0 |
EPI_HB16_ALE_HIGH);

//配置 CS1、MRAM 接口、请参阅 ICD
EPIConfigHB16CSSet (EPI0_BASE、1、
(EPI_HB16_MODE_ADMUX |
EPI_HB16_WRWAIT_1 |
EPI_HB16_RDWAIT_1 |
EPI_HB16_ALE_HIGH);


EPIAddressMapSet (EPI0_BASE、((EPI_ADDR_RAM_BASE_6 | EPI_ADDR_RAM_SIZE_16MB)|(EPI_ADDR_PER_BASE_A | EPI_ADDR_PER_SIZE_16MB));

/***调整 MRAM 等待状态、将读取和写入都减少1个等待状态****
//EPIConfigHB16TimingSet (EPI0_BASE、1、(EPI_HB16_RDWAIT_MINUS_ENABLE | EPI_HB16_WRWAIT_MINUS_ENABLE));
//EPIConfigHB16TimingSet (EPI0_BASE、1、EPI_HB16_RDWAIT_MINUS_ENABLE);
//EPIConfigHB16TimingSet (EPI0_BASE、1、EPI_HB16_WRWAIT_MINUS_ENABLE);

/*通过轮询等待唤醒完成
*初始化序列位。 当 SDRAM 接口时该位为真
*会执行初始化、而 SDRAM 接口时为 false
*它不是在一个唤醒期间。 */

while (EPI0->STAT 和 EPI_STAT_INITSEQ)

}

退货(状态);

}

提前感谢。

Perry

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

    尊敬的 Perry:

     我不确定为什么 CS 和 WRn 在初始化后变为激活状态。 您能否单步执行代码以找出在初始化期间哪个代码行导致 WRn 和 CS 变为低电平、然后又变为高电平?

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

    您好、Charles

    我单步执行代码、因此当调用函数 EPIModeSet()时、WRN 和 CS 线路以及 EPI 总线上的地址线路都变为低电平(有效)。

    当调用 EPIConfigHB16Set()函数时、WRn 和 CS 线路变为高电平(非活动状态)。

    这就是造成问题的原因。  写入地址0的操作看起来像是写入地址0。

    是否无法配置控制线的默认状态?

    您是否也可以确认在调用  EPIModeSet()后 EPI 地址行始终为零 ?

    如果我们可以确认这一点、而只是不在 MRAM 器件上使用地址零、我们可以解决这个问题吗?

    代码片段

    _______________

    //主机总线16位接口

    //当此函数调用 WRn 时、CS 设置为低电平(运行状态)
    EPIModeSet (EPI0_BASE、EPI_MODE_HB16);

    //根据 ICD 进行 HB16设置、以允许单个配置
    // PLL 存储器(CS0)和 MRAM (CS1)

    //当此函数调用 WRn 时、CS 设置为高电平(非活动状态)
    EPIConfigHB16Set (EPI0_BASE、
    (EPI_HB16_MODE_ADMUX |
    EPI_HB16_IN_READY_EN |
    EPI_HB16_BSEL |
    EPI_HB16_CSCFG_ALE_DUAL_CS |
    EPI_HB16_CSBAUD)、
    8);// PF 为0

    香港特区政府今日(星期一)在香港特区政府总部举行会议

    提前感谢

    Perry

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

    尊敬的 Perry:

     您可以尝试在  EPIModeSet 之后移动下面一行吗? 我希望这能在一开始就解决不需要的活动 WRN。 也许、您可以在 EPIModeSet 之前、在 GPIO 模式中将 PN2设为高电平。 如果这会产生什么影响、请告诉我。  

    MAP_GPIOPinConfigure (GPIO_PN2_EPI0S29);// EPI_WRn

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

    您好、Charles

    在配置 EPI 总线后、我似乎可以通过将所有 GPOI Port N 引脚的初始化移动到来解决此问题。

    我移动了这几行代码

    //配置端口 N GPIO 管脚以供 EPI 使用
    MAP_GPIOPinConfigure (GPIO_PN2_EPI0S29);//WRn
    MAP_GPIOPinConfigure (GPIO_PN3_EPI0S30);//EPI_ALE
    MAP_GPIOPinConfigure (GPIO_PN4_EPI0S34);// CS2n (FPGA)、未使用
    MAP_GPIOPinConfigure (GPIO_PN5_EPI0S35);//CRE、未使用

    //配置端口 N GPIO 管脚以供 EPI 使用
    MAP_GPIOPinTypeEPI (GPIO_PORTN_BASE (GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 | GPIO_PIN_2));

    延迟时间  

    while (EPI0->STAT 和 EPI_STAT_INITSEQ){};

    已通过分析仪验证、我们不再看到电源复位时的写入使能(WRn)引脚脉冲、电源复位时的 MRAM 损坏不再是问题。

    感谢您的帮助。

    Perry