打印

GD32F470 EXMC的冲突问题

[复制链接]
625|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
关于同时使用EXMC上的 SRAM 区域(0X6000 0000至0X6FFF FFFF)与SDRAM区域(0XC000 0000 至 0XCFFF FFFF)会产生冲突的问题。

黄色代表对SDRAM的片选信号,蓝色代表对EXMC上外接网卡片选信号,同时访问时,不应该两者同时被选中,否则会造成地址线和数据线的冲突。
现在,两者有同时被选中的情况。

当对EXMC上外接的网卡进行读写时,读写结束,SDRAM恢复自刷新,之前有持续拉低SDRAM的信号,信号约2000ns。
以上是遇到的问题,希望有大神解答。

使用特权

评论回复
沙发
lly123456|  楼主 | 2023-4-10 16:42 | 只看该作者

使用特权

评论回复
板凳
lly123456|  楼主 | 2023-4-13 11:06 | 只看该作者
在GD32F470上的EXMC同时外接了,DM9000A和一块SDRAM。DM9000A使用的是NOR/PSRAM的BANK0 Regions1区域,使用的命令地址是0x64000100区域,数据地址是0x64000108区域。SDRAM使用的是SDRAM device0区域,是0XC000 0000这一地址起始。单独使用都是可以的,同时使用会出现冲突问题。

后来查了手册,DM9000A所使用的区域16位数据传输下,内部的地址线是这样对应的,HADDR[25:1]--->EXMC_A[24:0],根据HADDR[27:26]作为片选线。SDRAM所使用的区域在16位数据传输下,内部的地址线是这样对应的,HADDR[26:25]作为bank选中线,HADDR[24:12]作为行地址线,HADDR[11:1]作为列地址线。

会是这样的内部址线的冲突,让他们没办法同时使用吗?

使用特权

评论回复
地板
lly123456|  楼主 | 2023-4-27 09:07 | 只看该作者
问题已经解决了,是勘误手册上所说的,SDRAM和其他外设同时使用EXMC会有冲突的问题。建议分时复用,在操作SDRAM时,不操作其他的EXMC外设

使用特权

评论回复
5
chifu134| | 2023-5-9 10:50 | 只看该作者
楼主,请问下您用过gd32e503系列吗?m33内核。我现在把它配置成NOR和FPGA通信,始终不能成功。
这是我的初始化代码,还有时序参数
void Exmc_Norsram_Init()
{
        exmc_norsram_parameter_struct norsram_init_struct;
        exmc_norsram_timing_parameter_struct norsram_timing_init_struct;
        
        /* enable EXMC clock*/
        rcu_periph_clock_enable(RCU_EXMC);        //时钟使能
        rcu_periph_clock_enable(RCU_GPIOD);
        rcu_periph_clock_enable(RCU_GPIOE);
        rcu_periph_clock_enable(RCU_GPIOB);
        
        /* configure GPIO */
        /*************************************************************************
        * AD[0~1]:PD14/15        AD[2~3]:PD0/1        AD[4~12]:PE7~15                AD[13~15]:PD8~10
        * NADV:PB7        NE0:PD7         NWAIT:PD6        NWE:PD5         NOE:PD4        
        **************************************************************************/
    gpio_init(GPIOD, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0  | GPIO_PIN_1  | GPIO_PIN_4 |
                                                                                                                 GPIO_PIN_5  | GPIO_PIN_7  | GPIO_PIN_8 |
                                                                                                                 GPIO_PIN_9  | GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15 );
    gpio_init(GPIOE, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7  | GPIO_PIN_8  | GPIO_PIN_9  | GPIO_PIN_10 |
                                                                                                                 GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);
    gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
        gpio_init(GPIOD, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
        
        
        norsram_timing_init_struct.asyn_address_setuptime = 6;//9
        norsram_timing_init_struct.asyn_address_holdtime = 3;//2
        norsram_timing_init_struct.asyn_data_setuptime = 11;//8
        norsram_timing_init_struct.bus_latency = 3;//1
        norsram_timing_init_struct.syn_clk_division = EXMC_SYN_CLOCK_RATIO_2_CLK;//EXMC_SYN_CLOCK_RATIO_DISABLE;
        norsram_timing_init_struct.syn_data_latency = EXMC_DATALAT_2_CLK;
        norsram_timing_init_struct.asyn_access_mode = EXMC_ACCESS_MODE_A;

        norsram_init_struct.norsram_region = EXMC_BANK0_NORSRAM_REGION0;
        norsram_init_struct.address_data_mux = ENABLE;
        norsram_init_struct.memory_type = EXMC_MEMORY_TYPE_NOR;
        norsram_init_struct.databus_width = EXMC_NOR_DATABUS_WIDTH_16B;
        norsram_init_struct.burst_mode = DISABLE;
        norsram_init_struct.nwait_polarity = EXMC_NWAIT_POLARITY_LOW;
        norsram_init_struct.wrap_burst_mode = DISABLE;
        norsram_init_struct.nwait_config = EXMC_NWAIT_CONFIG_BEFORE;
        norsram_init_struct.memory_write = ENABLE;
        norsram_init_struct.nwait_signal = DISABLE;
        norsram_init_struct.extended_mode = DISABLE;
        norsram_init_struct.asyn_wait = DISABLE;
        norsram_init_struct.write_mode = EXMC_ASYN_WRITE;

        norsram_init_struct.read_write_timing = &norsram_timing_init_struct;            
        norsram_init_struct.write_timing = &norsram_timing_init_struct;        

        exmc_norsram_init(&norsram_init_struct);
        
        /* enable EXMC norsram bank0 */
        exmc_norsram_enable(EXMC_BANK0_NORSRAM_REGION0);

屏幕截图 2023-05-09 103946.png (237.99 KB )

屏幕截图 2023-05-09 103946.png

使用特权

评论回复
6
caigang13| | 2023-5-9 19:41 | 只看该作者
不同的bank区域应该不会出现同时片选的问题啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

14

帖子

0

粉丝