Browse Source
With LAN8742, LAN8720, LAN83825 and DP83848 as possible options, and the symbols PHY_LAN8720, PHY_LAN8742, PHY_DP83825 and PHY_DP8348. The default is PHY_LAN8742 which is the existing behaviour. The eth_init() parameters for the Portenta H7 board are set to phy_addr=0 and phy_type=LAN8742, which matches the previous defaults and the schematics. Tested with LAN8720 and DP83848 breakout boards at 10M Duplex and 100M Duplex modes. Signed-off-by: robert-hh <robert@hammelrath.com>pull/13630/head
robert-hh
9 months ago
committed by
Damien George
7 changed files with 171 additions and 31 deletions
@ -0,0 +1,59 @@ |
|||
/*
|
|||
* This file is part of the MicroPython project, http://micropython.org/
|
|||
* |
|||
* The MIT License (MIT) |
|||
* |
|||
* Copyright (c) 2019 Damien P. George |
|||
* Copyright (c) 2024 Robert Hammelrath |
|||
* |
|||
* Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
* of this software and associated documentation files (the "Software"), to deal |
|||
* in the Software without restriction, including without limitation the rights |
|||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
* copies of the Software, and to permit persons to whom the Software is |
|||
* furnished to do so, subject to the following conditions: |
|||
* |
|||
* The above copyright notice and this permission notice shall be included in |
|||
* all copies or substantial portions of the Software. |
|||
* |
|||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|||
* THE SOFTWARE. |
|||
*/ |
|||
|
|||
#include "py/mphal.h" |
|||
#include "eth_phy.h" |
|||
|
|||
#if defined(MICROPY_HW_ETH_MDC) |
|||
|
|||
#define PHY_SCSR_LAN87XX (0x001f) |
|||
#define PHY_SCSR_LAN87XX_SPEED_Pos (2) |
|||
#define PHY_SCSR_LAN87XX_SPEED_Msk (7) |
|||
|
|||
#define PHY_SCSR_DP838XX (0x0010) |
|||
#define PHY_RECR_DP838XX (0x0015) |
|||
#define PHY_SCSR_DP838XX_DUPLEX_Msk (4) |
|||
#define PHY_SCSR_DP838XX_10M_Msk (2) |
|||
|
|||
int16_t eth_phy_lan87xx_get_link_status(uint32_t phy_addr) { |
|||
// Get the link mode & speed
|
|||
int16_t scsr = eth_phy_read(phy_addr, PHY_SCSR_LAN87XX); |
|||
return (scsr >> PHY_SCSR_LAN87XX_SPEED_Pos) & PHY_SCSR_LAN87XX_SPEED_Msk; |
|||
} |
|||
|
|||
int16_t eth_phy_dp838xx_get_link_status(uint32_t phy_addr) { |
|||
int16_t scsr = 0; |
|||
// Get the link mode & speed
|
|||
uint16_t temp = eth_phy_read(phy_addr, PHY_SCSR_DP838XX); |
|||
scsr = (temp & PHY_SCSR_DP838XX_10M_Msk) ? PHY_SPEED_10HALF : PHY_SPEED_100HALF; |
|||
if (temp & PHY_SCSR_DP838XX_DUPLEX_Msk) { |
|||
scsr |= PHY_DUPLEX; |
|||
} |
|||
return scsr; |
|||
} |
|||
|
|||
#endif |
@ -0,0 +1,67 @@ |
|||
/*
|
|||
* This file is part of the MicroPython project, http://micropython.org/
|
|||
* |
|||
* The MIT License (MIT) |
|||
* |
|||
* Copyright (c) 2019 Damien P. George |
|||
* Copyright (c) 2024 Robert Hammelrath |
|||
* |
|||
* Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
* of this software and associated documentation files (the "Software"), to deal |
|||
* in the Software without restriction, including without limitation the rights |
|||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
* copies of the Software, and to permit persons to whom the Software is |
|||
* furnished to do so, subject to the following conditions: |
|||
* |
|||
* The above copyright notice and this permission notice shall be included in |
|||
* all copies or substantial portions of the Software. |
|||
* |
|||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|||
* THE SOFTWARE. |
|||
*/ |
|||
|
|||
#ifndef MICROPY_INCLUDED_STM32_PHY_H |
|||
#define MICROPY_INCLUDED_STM32_PYH_H |
|||
|
|||
#if defined(MICROPY_HW_ETH_MDC) |
|||
|
|||
// Common ETH PHY register definitions
|
|||
#undef PHY_BCR |
|||
#define PHY_BCR (0x0000) |
|||
#define PHY_BCR_SOFT_RESET (0x8000) |
|||
#define PHY_BCR_AUTONEG_EN (0x1000) |
|||
#define PHY_BCR_POWER_DOWN (0x0800U) |
|||
|
|||
#undef PHY_BSR |
|||
#define PHY_BSR (0x0001) |
|||
#define PHY_BSR_LINK_STATUS (0x0004) |
|||
#define PHY_BSR_AUTONEG_DONE (0x0020) |
|||
|
|||
#undef PHY_ANAR |
|||
#define PHY_ANAR (0x0004) |
|||
#define PHY_ANAR_SPEED_10HALF (0x0020) |
|||
#define PHY_ANAR_SPEED_10FULL (0x0040) |
|||
#define PHY_ANAR_SPEED_100HALF (0x0080) |
|||
#define PHY_ANAR_SPEED_100FULL (0x0100) |
|||
#define PHY_ANAR_IEEE802_3 (0x0001) |
|||
|
|||
#define PHY_SPEED_10HALF (1) |
|||
#define PHY_SPEED_10FULL (5) |
|||
#define PHY_SPEED_100HALF (2) |
|||
#define PHY_SPEED_100FULL (6) |
|||
#define PHY_DUPLEX (4) |
|||
|
|||
uint32_t eth_phy_read(uint32_t phy_addr, uint32_t reg); |
|||
void eth_phy_write(uint32_t phy_addr, uint32_t reg, uint32_t val); |
|||
|
|||
int16_t eth_phy_lan87xx_get_link_status(uint32_t phy_addr); |
|||
int16_t eth_phy_dp838xx_get_link_status(uint32_t phy_addr); |
|||
|
|||
#endif |
|||
|
|||
#endif // MICROPY_INCLUDED_STM32_PHY_H
|
Loading…
Reference in new issue