Katarzyna Kopel / Mbed 2 deprecated FRDM_K64F-Ethernet_PHY

Dependencies:   mbed mbed-rtos EthernetInterface

Files at this revision

API Documentation at this revision

Comitter:
kopelka
Date:
Wed Jan 16 01:12:28 2019 +0000
Parent:
2:e30076def8a7
Commit message:
cable test

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Tue Jan 15 23:21:19 2019 +0000
+++ b/main.cpp	Wed Jan 16 01:12:28 2019 +0000
@@ -47,6 +47,15 @@
     kEnetSpeed10M = 0,   /*!< ENET PHY 10 M speed*/
     kEnetSpeed100M = 1  /*!< ENET PHY 100 M speed*/
 } enet_phy_speed_t;
+
+typedef enum _link_md
+{
+    autoMDIRegister = 0x1F,   /*!< ENET PHY 10 M speed*/
+        disableAutoMDI = 0x2000,
+        startCableDiagREgister = 0x1D,
+        enableCableDiag = 0x8000
+} link_md_t;
+
 void onCharReceived()
 {
     c = s.getc();
@@ -72,7 +81,9 @@
     mii_write_data(phyReg,new_speed);
 
 }
-
+ void turn_on_autonegotiation(uint32_t phyReg,uint32_t message){
+        mii_write_data(phyReg,message);
+ }
 
 int get_connection_speed(uint32_t phyReg, uint32_t *dataPtr)
 {
@@ -154,6 +165,66 @@
 
                 break;
         }
+        case '4':{
+            uint32_t counter;
+             uint32_t data1;
+ 
+            printf("Autonegotiation\n");
+
+            speed = get_connection_speed(kEnetPhyCt2, &data);
+            printf("Connected at %d Mb/s\r\n", speed);
+            printf("Changing speed to 10Mb\n");
+            change_speed(kEnetPhyCR, kEnetSpeed10M);
+            turn_on_autonegotiation(kEnetPhyCR, kEnetPhyAutoNeg);
+            
+            for (counter = 0; counter < 0x10000; counter++)
+            {
+                if (enet_mii_read(0,0,kEnetPhySR,&data1) == 0)
+                {
+                    if ((data1 & kEnetPhyAutoNegComplete) != 0)
+                    {
+                                                printf("Autonegotiaion enabled\n");
+                                                break;
+                    }
+                }                       
+            }
+            
+            printf("Connecting to network...\r\n");
+            eth.connect(); 
+            
+            speed = get_connection_speed(kEnetPhyCt2, &data);
+            printf("Connected at %d Mb/s\r\n", speed);
+            break;
+        }
+        case '5':
+        {
+            uint32_t counter;
+             uint32_t data1;
+            double result;
+            printf("Cable Test...\n");
+            printf("Disable auto MDI/MDI-X\n");
+            mii_write_data(autoMDIRegister,disableAutoMDI);
+            printf("Start cable diagnostic\n");
+            mii_write_data(startCableDiagREgister,enableCableDiag);
+            printf("Wait ...\n");
+                        for (counter = 0; counter < 0x10000; counter++)
+            {
+                if (enet_mii_read(0,0,startCableDiagREgister,&data1) == 0)
+                {
+                    if (!(data1 & enableCableDiag))
+                    {
+                                                printf("Test completed\n");
+                                                break;
+                    }
+                }                       
+            }
+                        if ((data1 & 0x6000))
+                            printf("Test failed\n");
+            printf("Print data %d\n", data);
+            result = (double)(0x00FF & data1);
+            printf("Result = %lf \n", result*0.38);
+            break;
+        }
         default: break;
     }       
     while(1);