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
Revision 3:76e748d8d250, committed 2019-01-16
- 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);