硬汉嵌入式论坛

 找回密码
 立即注册
查看: 202|回复: 4
收起左侧

[以太网] 求助!DM9000无法正确读出ID

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2025-11-3 17:13:07 | 显示全部楼层 |阅读模式
单纯只读ID,读出来得是FFFFFFF,不带协议栈,板子是V7,FMC配置都是使用驱动配置得。





static void DM9K_CtrlLinesConfig(void)
{
        /*

        PD0/FMC_D2
        PD1/FMC_D3
        PD4/FMC_NOE                ---- 读控制信号,OE = Output Enable , N 表示低有效
        PD5/FMC_NWE                -XX- 写控制信号,AD7606 只有读,无写信号
        PD8/FMC_D13
        PD9/FMC_D14
        PD10/FMC_D15
        PD14/FMC_D0
        PD15/FMC_D1

        PE7/FMC_D4
        PE8/FMC_D5
        PE9/FMC_D6
        PE10/FMC_D7
        PE11/FMC_D8
        PE12/FMC_D9
        PE13/FMC_D10
        PE14/FMC_D11
        PE15/FMC_D12

        PG0/FMC_A10                --- 和主片选FMC_NE2一起译码
        PG1/FMC_A11                --- 和主片选FMC_NE2一起译码
        PG9/FMC_NE2                --- 主片选(OLED, 74HC574, DM9000, AD7606)

        PF0/FMC_A0      ---- RS
        */

        GPIO_InitTypeDef gpio_init_structure;

        /* 使能 GPIO时钟 */
        __HAL_RCC_GPIOD_CLK_ENABLE();
        __HAL_RCC_GPIOE_CLK_ENABLE();
        __HAL_RCC_GPIOF_CLK_ENABLE();
        __HAL_RCC_GPIOG_CLK_ENABLE();
        __HAL_RCC_GPIOH_CLK_ENABLE();
        __HAL_RCC_GPIOI_CLK_ENABLE();

        /* 使能FMC时钟 */
        __HAL_RCC_FMC_CLK_ENABLE();

        /* 设置 GPIOD 相关的IO为复用推挽输出 */
        gpio_init_structure.Mode = GPIO_MODE_AF_PP;
        gpio_init_structure.Pull = GPIO_PULLUP;
        gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;//GPIO_SPEED_FREQ_VERY_HIGH
        gpio_init_structure.Alternate = GPIO_AF12_FMC;

        /* 配置GPIOD */
        gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 |
                                  GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_14 |
                                  GPIO_PIN_15;
        HAL_GPIO_Init(GPIOD, &gpio_init_structure);

        /* 配置GPIOE */
        gpio_init_structure.Pin = 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;
        HAL_GPIO_Init(GPIOE, &gpio_init_structure);

        /* 配置GPIOG */
        gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_9;
        HAL_GPIO_Init(GPIOG, &gpio_init_structure);

        /* 配置GPIOH */
        gpio_init_structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12
                                  | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
        HAL_GPIO_Init(GPIOH, &gpio_init_structure);

        /* 配置GPIOI */
        gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_6
                                  | GPIO_PIN_7 | GPIO_PIN_9 | GPIO_PIN_10;
        HAL_GPIO_Init(GPIOI, &gpio_init_structure);

        /* 配置GPIOF */
        gpio_init_structure.Pin = GPIO_PIN_0;
        HAL_GPIO_Init(GPIOF, &gpio_init_structure);
   
}


static void DM9K_FSMCConfig(void)
{
        SRAM_HandleTypeDef hsram = {0};
        FMC_NORSRAM_TimingTypeDef SRAM_Timing = {0};

        hsram.Instance  = FMC_NORSRAM_DEVICE;
        hsram.Extended  = FMC_NORSRAM_EXTENDED_DEVICE;

        SRAM_Timing.AddressSetupTime       = 4;
        SRAM_Timing.AddressHoldTime        = 1;
        SRAM_Timing.DataSetupTime          = 2;
        SRAM_Timing.BusTurnAroundDuration  = 3;               
        SRAM_Timing.CLKDivision            = 2;
        SRAM_Timing.DataLatency            = 2;
        SRAM_Timing.AccessMode             = FMC_ACCESS_MODE_A;

        hsram.Init.NSBank             = FMC_NORSRAM_BANK1;
        hsram.Init.DataAddressMux     = FMC_DATA_ADDRESS_MUX_DISABLE;
        hsram.Init.MemoryType         = FMC_MEMORY_TYPE_SRAM;
        hsram.Init.MemoryDataWidth    = FMC_NORSRAM_MEM_BUS_WIDTH_32;        /* 32位总线宽度 */
        hsram.Init.BurstAccessMode    = FMC_BURST_ACCESS_MODE_DISABLE;
        hsram.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
        hsram.Init.WaitSignalActive   = FMC_WAIT_TIMING_BEFORE_WS;
        hsram.Init.WriteOperation     = FMC_WRITE_OPERATION_ENABLE;
        hsram.Init.WaitSignal         = FMC_WAIT_SIGNAL_DISABLE;
        hsram.Init.ExtendedMode       = FMC_EXTENDED_MODE_DISABLE;
        hsram.Init.AsynchronousWait   = FMC_ASYNCHRONOUS_WAIT_DISABLE;
        hsram.Init.WriteBurst         = FMC_WRITE_BURST_DISABLE;
        hsram.Init.ContinuousClock    = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;

        /* 初始化SRAM控制器 */
        if(HAL_SRAM_Init(&hsram, &SRAM_Timing, &SRAM_Timing) != HAL_OK)
        {
                /* 初始化错误 */
                Error_Handler();
        }
}




回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2025-11-3 17:13:36 | 显示全部楼层
  MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  MPU_InitStruct.Number = MPU_REGION_NUMBER3;
  MPU_InitStruct.BaseAddress = 0x60000000;
  MPU_InitStruct.Size = MPU_REGION_SIZE_64MB;
  MPU_InitStruct.SubRegionDisable = 0x0;
  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
  MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
  MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
  MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
回复

使用道具 举报

714

主题

3709

回帖

5876

积分

论坛元老

积分
5876
发表于 2025-11-3 20:34:06 | 显示全部楼层
euphoria1 发表于 2025-11-3 17:13
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  MPU_InitStruct.Number = MPU_REGION_NUMBER3;
  MPU_I ...





        SRAM_Timing.AddressSetupTime       = 8;          /* 5*4.17ns = ~20.9ns,地址建立时间,范围0 -15个FMC时钟周期个数 */
        SRAM_Timing.AddressHoldTime        = 0;          /* 地址保持时间,配置为模式A时,用不到此参数 范围1 -15个时钟周期个数 */
        SRAM_Timing.DataSetupTime          = 110;          /* 3*4.17ns =~12.51ns,数据保持时间,范围1 -255个时钟周期个数 */
        SRAM_Timing.BusTurnAroundDuration  = 8;         /* 15*4.17n = ~62.55ns, 两个连续数据之间的间隔, 范围0 -15个FMC时钟周期个数*/








       

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119430
QQ
发表于 2025-11-4 09:15:16 | 显示全部楼层
euphoria1 发表于 2025-11-3 17:13
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  MPU_InitStruct.Number = MPU_REGION_NUMBER3;
  MPU_I ...

参考这里例子设置,注释到用不到的,仅初始化DM9000,对比测试下,这样查找问题方便些。

V7,V6,V5开发板RL-TCPnet V7.X双网口教程发布,单网络协议栈管理DM9000和DM9162(2020-11-30)
https://forum.anfulai.cn/forum.p ... 0233&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2025-11-5 14:26:52 | 显示全部楼层
谢谢 两位目前DM9000 ping 通了,是MPU没配置好。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-11-22 00:27 , Processed in 0.041074 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表