硬汉嵌入式论坛

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

[有问必答] 使用V5开发板DM9000例程时ID读出不对

  [复制链接]

2

主题

12

回帖

18

积分

新手上路

积分
18
发表于 2021-8-8 15:39:47 | 显示全部楼层 |阅读模式
板子参照安富莱V5开发板设计,晶振使用8M。

但是发现读出ID始终为0x29282B2A。
首先检查了一下接线:


没有发现错误。
然后检查程序

也没有发现错误。
不知道为何,请求各路大神指教。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-8-9 12:19:49 | 显示全部楼层
方便的话,发你得原理图和DM9000的配置代码
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2021-8-11 10:19:12 | 显示全部楼层
eric2013 发表于 2021-8-9 12:19
方便的话,发你得原理图和DM9000的配置代码

您好,我可以加QQ单独发您吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-8-12 09:10:53 | 显示全部楼层
都业龙 发表于 2021-8-11 10:19
您好,我可以加QQ单独发您吗?

原理图仅贴DM9000那些引脚即可。

我主要是想看下你的引脚,地址和FSMC的配置是否有问题。
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2021-8-13 09:12:29 | 显示全部楼层
eric2013 发表于 2021-8-12 09:10
原理图仅贴DM9000那些引脚即可。

我主要是想看下你的引脚,地址和FSMC的配置是否有问题。


static void DM9K_CtrlLinesConfig(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

        /* ê1ÄüFSMCê±Öó */
        RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);

        /* ê1Äü GPIOê±Öó */
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOG, ENABLE);

        /* éèÖÃ PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE), PD.08(D13), PD.09(D14),
         PD.10(D15), PD.14(D0), PD.15(D1) Îa¸′óÃíÆíìêä3ö */

        GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);

        GPIO_InitStructure.GPIO_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;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOD, &GPIO_InitStructure);

        /* éèÖÃ PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
         PE.14(D11), PE.15(D12) Îa¸′óÃíÆíìêä3ö */

        GPIO_PinAFConfig(GPIOE, GPIO_PinSource4 , GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource5 , GPIO_AF_FSMC);

        GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource10 , GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource13 , GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource14 , GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource15 , GPIO_AF_FSMC);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | 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(GPIOE, &GPIO_InitStructure);

        /* éèÖà PD.13(A18 (RS))  Îa¸′óÃíÆíìêä3ö */
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_FSMC);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
        GPIO_Init(GPIOD, &GPIO_InitStructure);

        /* éèÖà PG10 (CS)) Îa¸′óÃíÆíìêä3ö */
        GPIO_PinAFConfig(GPIOG, GPIO_PinSource10, GPIO_AF_FSMC);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_Init(GPIOG, &GPIO_InitStructure);

        /* PA15 êÇDM9000_INTÖD¶Ïêäèë¿ú(±¾3ìDòÎ′ê1óÃ) */
}

static void DM9K_FSMCConfig(void)
{
        FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
        FSMC_NORSRAMTimingInitTypeDef  p;

        /*-- FSMC Configuration ------------------------------------------------------*/
        /*----------------------- SRAM Bank 3 ----------------------------------------*/
        /*-- FSMC Configuration ------------------------------------------------------*/
        p.FSMC_AddressSetupTime = 6;                /* éèÖÃÎa2»á3ö′í; 3Õy3£ */
        p.FSMC_AddressHoldTime = 2;
        p.FSMC_DataSetupTime = 4;                        /* éèÖÃÎa13ö′í£¬2Õy3£ */
        p.FSMC_BusTurnAroundDuration = 8;
        p.FSMC_CLKDivision = 0;
        p.FSMC_DataLatency = 0;
        p.FSMC_AccessMode = FSMC_AccessMode_A;

        FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;
        FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
        FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;        // FSMC_MemoryType_PSRAM;
        FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
        FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
        FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
        FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
        FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
        FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
        FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
        FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
        FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
        FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
        FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

        FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);

        /*!< Enable FSMC Bank1_SRAM3 Bank */
        FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);
}

回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2021-8-13 09:41:37 | 显示全部楼层
eric2013 发表于 2021-8-12 09:10
原理图仅贴DM9000那些引脚即可。

我主要是想看下你的引脚,地址和FSMC的配置是否有问题。

FSMC接线情况
39248655b0c6ea9c3bb57d78553e1b2.png
4619cc80732602e8c5e1d7b9f732930.png
ce947f56736a6144854019c7e336033.png
f3279dd872f646a3d3cb9bbcb0ee851.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-8-13 15:34:02 | 显示全部楼层

FMC地址配置的多少
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2021-8-13 17:46:18 | 显示全部楼层
eric2013 发表于 2021-8-13 15:34
FMC地址配置的多少

FSMC地址配置与读ID函数。
cbfaea67e22b0827f76e020c4d33398.png
b31c5640f9dbb0ecf46d4f4c30e974d.png
4522842d3e9fea6c738cc7ffd009d0a.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-8-14 08:22:14 | 显示全部楼层
都业龙 发表于 2021-8-13 17:46
FSMC地址配置与读ID函数。

配置上看着没什么问题。

你设置GPIO速度等级为low试试,也就是2MHz,或10MHz
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2021-8-14 08:57:44 | 显示全部楼层
eric2013 发表于 2021-8-14 08:22
配置上看着没什么问题。

你设置GPIO速度等级为low试试,也就是2MHz,或10MHz

我的STM32使用的是8M的外部晶振,在程序中这两处进行过修改。另外,我的FSMC走线比较乱拐的弯比较多,还打过过孔。这会有影响吗?
f8df0e15e292ebe477278fede1dc68d.png
314c31e4cceb3d868eba87d01d330e2.png
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2021-8-14 08:59:56 | 显示全部楼层
eric2013 发表于 2021-8-14 08:22
配置上看着没什么问题。

你设置GPIO速度等级为low试试,也就是2MHz,或10MHz

GPIO设置为低速后还是不行
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-8-15 07:55:33 | 显示全部楼层
都业龙 发表于 2021-8-14 08:59
GPIO设置为低速后还是不行

你再核对下你的引脚,然后再看看焊接。
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2021-8-24 09:35:26 | 显示全部楼层
eric2013 发表于 2021-8-15 07:55
你再核对下你的引脚,然后再看看焊接。

还有几点疑问:
1、安富莱的双网口教程中写的使用的是FMC总线,但是程序中用的是FSMC总线。
2、我的407使用的是8M晶振,不过程序中已经倍频到128M,这会有影响吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-8-24 10:20:01 | 显示全部楼层
都业龙 发表于 2021-8-24 09:35
还有几点疑问:
1、安富莱的双网口教程中写的使用的是FMC总线,但是程序中用的是FSMC总线。
2、我的407 ...

1、V5 是FSMC,V6是FMC,V7是FMC,用于8080总线模式都是一个总线模式。都是一个东西
2.  可以
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2021-8-24 10:50:16 | 显示全部楼层
eric2013 发表于 2021-8-24 10:20
1、V5 是FSMC,V6是FMC,V7是FMC,用于8080总线模式都是一个总线模式。都是一个东西
2.  可以

刚发现我一直读出的0x29282B2A是DM9000的ID号寄存器地址。查了别人的帖子说是什么DM9000上电之后需要硬件复位,但是DM9000手册中没有此项说明,安富莱的原理图中也没有发现能够实现硬件复位的电路。
1267395d92cf76c798cacb2dfaecaf0.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-8-25 09:47:15 | 显示全部楼层
都业龙 发表于 2021-8-24 10:50
刚发现我一直读出的0x29282B2A是DM9000的ID号寄存器地址。查了别人的帖子说是什么DM9000上电之后需要硬件 ...

QQ截图20210825094632.png
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2021-9-1 09:31:28 | 显示全部楼层
初步判断是焊接问题,在我多次对DM9000A的管脚进行焊接后,可以读出正确ID。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-9-1 11:56:49 | 显示全部楼层
都业龙 发表于 2021-9-1 09:31
初步判断是焊接问题,在我多次对DM9000A的管脚进行焊接后,可以读出正确ID。

不容易,终于找到原因了。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2022-4-13 15:29:56 | 显示全部楼层
楼主好,我想问问DM9000的基地址是什么算出来的可以说说吗,老大看到了也可以说说 image.png
回复

使用道具 举报

12

主题

178

回帖

214

积分

高级会员

积分
214
发表于 2022-4-13 19:05:14 | 显示全部楼层
tzh 发表于 2022-4-13 15:29
楼主好,我想问问DM9000的基地址是什么算出来的可以说说吗,老大看到了也可以说说

地址不是唯一的,只要满足跟硬件对应的位是0或者1就行(如果是16位的总线,需要移位)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 10:59 , Processed in 0.744350 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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