Ethernet link status for the K64F

Dependents:   JRO_CR2 K64F_EthLink_HelloWorld frdm_test JRO_DDSv2

Simple K64F technique to determine if the Ethernet PHY link is up or down. The routine utilizes the Ethernet MII interface to gain access to the Ethernet PHY which contains the actual link status.

I wrote this because the mbed Ethernet function does not recognize its own "int link();" function with the K64F.

Committer:
loopsva
Date:
Thu May 19 17:20:55 2016 +0000
Revision:
4:9d2a4dc03170
Parent:
0:a447869e1046
Changed from:
;
; uint32_t k64f_mdio_reg = ENET_EIR;
;
; To:
;
; uint32_t k64f_mdio_reg = ENET->EIR;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 0:a447869e1046 1 #ifndef K64FLINK_H
loopsva 0:a447869e1046 2 #define K64FLINK_H
loopsva 0:a447869e1046 3
loopsva 0:a447869e1046 4 #include "mbed.h"
loopsva 0:a447869e1046 5
loopsva 0:a447869e1046 6 /** Software routine used to get Ethernet Link status from the KSZ8081
loopsva 0:a447869e1046 7 * Ethernet PHY on the FRDM-K64F via the K64F MDIO interface.
loopsva 0:a447869e1046 8 *
loopsva 0:a447869e1046 9 * @code
loopsva 0:a447869e1046 10 * //See K64F_EthLink_HelloWorld example
loopsva 0:a447869e1046 11 * @endcode
loopsva 0:a447869e1046 12 */
loopsva 0:a447869e1046 13
loopsva 0:a447869e1046 14 #define MDIO_MII_READY_BIT 0x00800000 //Bit in ENET_EIR reister that allows access to ENET_MMFR register
loopsva 0:a447869e1046 15 #define MDIO_MII_LINK_BITS 0x0004 //Ethernet Link Up / Down bit in Phy's Basic Status Register
loopsva 0:a447869e1046 16 #define MDIO_GET_LINK_REG 0x60060000 //command for ENET_MMFR register to read Phy's Basic Status
loopsva 0:a447869e1046 17 // |------- ST = 01 start of frame 31,30
loopsva 0:a447869e1046 18 // |------- OP = 10 read 29,28
loopsva 0:a447869e1046 19 // ||----- PA = 00000 phy address 27,26,25,24,23
loopsva 0:a447869e1046 20 // ||---- RA = 00001 phy register Basic Status 22,21,20,19,18
loopsva 0:a447869e1046 21 // |---- TA = 10 turn around 17,16
loopsva 0:a447869e1046 22 // |||| DATA
loopsva 0:a447869e1046 23
loopsva 0:a447869e1046 24
loopsva 0:a447869e1046 25 /** k64f_phy_status Ethernet link result enumator
loopsva 0:a447869e1046 26 *
loopsva 0:a447869e1046 27 * @param k64f_phy_status enumator
loopsva 0:a447869e1046 28 *
loopsva 0:a447869e1046 29 */
loopsva 0:a447869e1046 30 enum k64f_phy_status {PHY_UP = 0, PHY_DOWN = 1, MDIO_TIMEOUT = 2};
loopsva 0:a447869e1046 31
loopsva 0:a447869e1046 32 /** Create k64fEthLink controller class
loopsva 0:a447869e1046 33 *
loopsva 0:a447869e1046 34 * @param k64fEthLink class
loopsva 0:a447869e1046 35 *
loopsva 0:a447869e1046 36 */
loopsva 0:a447869e1046 37 class k64fEthLink {
loopsva 0:a447869e1046 38
loopsva 0:a447869e1046 39 public:
loopsva 0:a447869e1046 40 /** Create a k64fEthLink object
loopsva 0:a447869e1046 41 *
loopsva 0:a447869e1046 42 * @param -none-
loopsva 0:a447869e1046 43 */
loopsva 0:a447869e1046 44 k64fEthLink();
loopsva 0:a447869e1046 45 /** Return Ethernet Link Status
loopsva 0:a447869e1046 46 *
loopsva 0:a447869e1046 47 * @param -none-
loopsva 0:a447869e1046 48 *
loopsva 0:a447869e1046 49 * @return the link status code from enum k64f_phy_status
loopsva 0:a447869e1046 50 */
loopsva 0:a447869e1046 51 int GetELink();
loopsva 0:a447869e1046 52
loopsva 0:a447869e1046 53 };
loopsva 0:a447869e1046 54
loopsva 0:a447869e1046 55 #endif