STM32H743 以太网问题 DP83848
小弟公司正在开发基于H743的应用,以前用的都是F4系列,网络一直没有问题。新上的H743 cube库只有Lan8742的例子。而且H7的和F4,F7相比,有较大变动。难道需要自己写DP83848的驱动吗?
把以前的驱动移植过来 wudianjun2001 发表于 2018-2-27 15:22
把以前的驱动移植过来
你的意思是把F7网络库移过来吗,二者网络库有很大差别 你现在只是换了PHY,不管是DP83848,还是Lan8742,他们都是有标准的通的MII/RMII接口,以及标准的基础参数寄存器,虽然换了内核,变化较大,但外设还是基本相同的,配置与使用差别不多,所以驱动移植一下应该不困难。 nyszx 发表于 2018-2-27 21:10
你现在只是换了PHY,不管是DP83848,还是Lan8742,他们都是有标准的通的MII/RMII接口,以及标准的基础参数寄 ...
能指导一下吗,是把以前F4使用的库移植过来还是使用H7的库,在H7的库上修改成对应的网卡 Switcc 发表于 2018-3-1 09:36
能指导一下吗,是把以前F4使用的库移植过来还是使用H7的库,在H7的库上修改成对应的网卡 ...
使用相同的库的话,上层应用应该变化也不大吧,比如STM32F746ZG-Nucleo lwip例程,只需要修改stm32f7xx_hal_conf.h中一下跟PHY相关就可以了:/* Section 2: PHY configuration section */
/* LAN8742A PHY Address*/ 改为DP83848实际地址
#define LAN8742A_PHY_ADDRESS 0x00U
/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/
#define PHY_RESET_DELAY ((uint32_t)0x00000FFFU)
/* PHY Configuration delay */
#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFFU)
#define PHY_READ_TO ((uint32_t)0x0000FFFFU)
#define PHY_WRITE_TO ((uint32_t)0x0000FFFFU)
/* Section 3: Common PHY Registers */这些标准寄存器是通用的,核对数据手册检查对应的功能和地址是否有变化,应该没啥差别,有的话修改就好
#define PHY_BCR ((uint16_t)0x00U) /*!< Transceiver Basic Control Register */
#define PHY_BSR ((uint16_t)0x01U) /*!< Transceiver Basic Status Register */
#define PHY_RESET ((uint16_t)0x8000U)/*!< PHY Reset */
#define PHY_LOOPBACK ((uint16_t)0x4000U)/*!< Select loop-back mode */
#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100U)/*!< Set the full-duplex mode at 100 Mb/s */
#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000U)/*!< Set the half-duplex mode at 100 Mb/s */
#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100U)/*!< Set the full-duplex mode at 10 Mb/s*/
#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000U)/*!< Set the half-duplex mode at 10 Mb/s*/
#define PHY_AUTONEGOTIATION ((uint16_t)0x1000U)/*!< Enable auto-negotiation function */
#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200U)/*!< Restart auto-negotiation function */
#define PHY_POWERDOWN ((uint16_t)0x0800U)/*!< Select the power down mode */
#define PHY_ISOLATE ((uint16_t)0x0400U)/*!< Isolate PHY from MII */
#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020U)/*!< Auto-Negotiation process completed */
#define PHY_LINKED_STATUS ((uint16_t)0x0004U)/*!< Valid link established */
#define PHY_JABBER_DETECTION ((uint16_t)0x0002U)/*!< Jabber condition detected */
/* Section 4: Extended PHY Registers */
#define PHY_SR ((uint16_t)0x1FU) /*!< PHY special control/ status register Offset */
#define PHY_SPEED_STATUS ((uint16_t)0x0004U)/*!< PHY Speed mask */
#define PHY_DUPLEX_STATUS ((uint16_t)0x0010U)/*!< PHY Duplex mask */
#define PHY_ISFR ((uint16_t)0x1DU) /*!< PHY Interrupt Source Flag register Offset */
#define PHY_ISFR_INT4 ((uint16_t)0x0010U)/*!< PHY Link down inturrupt */
再检查一下ethernetif.c中底层初始化相关的,如果有外部中断的话,再检查中断配置是否一致。 nyszx 发表于 2018-3-1 21:00
使用相同的库的话,上层应用应该变化也不大吧,比如STM32F746ZG-Nucleo lwip例程,只需要修改stm32f7xx_h ...
直接在H7 的例程上改的,网卡寄存器都能读,但是网络还没通 你可以按照原来的DP83848的程序模式来写,变得只是STM32这段的寄存器操作以及库函数操作之间存在的差异,驱动着一块的东西都是套路,按照套路来就可以了 Switcc 发表于 2018-3-8 19:01
直接在H7 的例程上改的,网卡寄存器都能读,但是网络还没通
字节对齐 或者 mpu 配置,貌似关键是 mpu 配置
正常来说,不管是 f4, f7 的dp83848,随便哪个都是可以移植到 h7上的,如果是库就更方面了 大佬,能分享一下代码吗,快被这个搞晕死了,我在原子的例程上搞的移植,还是不行
页:
[1]
2