Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed mbed-rtos EthernetInterface
Diff: main.cpp
- Revision:
- 3:76e748d8d250
- Parent:
- 2:e30076def8a7
diff -r e30076def8a7 -r 76e748d8d250 main.cpp
--- 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);