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.
Dependents: w7500-paho-mqtt openHAB_mqtt_W7500 kakaoIoTchatbot w7500-RFID-mqtt
Fork of WIZnetInterface by
Revision 14:2101ab5ee40f, committed 2015-06-17
- Comitter:
- embeddist
- Date:
- Wed Jun 17 00:24:45 2015 +0000
- Parent:
- 13:ec1c34e9ec45
- Child:
- 15:24a9f2df2145
- Commit message:
- - arch/int/W5500.c - fixed reset() for WIZ550io; - tested arch/in/W5500 on LPC824 / NUCLEOF103RB / FRDM-KL25Z
Changed in this revision
--- a/arch/ext/W5500.cpp Tue Jun 16 13:03:28 2015 +0900
+++ b/arch/ext/W5500.cpp Wed Jun 17 00:24:45 2015 +0000
@@ -155,23 +155,19 @@
void WIZnet_Chip::reset()
{
#if defined(USE_WIZ550IO_MAC)
+ //read the MAC address inside the module
+ reg_rd_mac(SHAR, mac);
+#endif
// hw reset
reset_pin = 1;
reset_pin = 0;
wait_us(500); // 500us (w5500)
reset_pin = 1;
wait_ms(400); // 400ms (w5500)
-
- reg_rd_mac(SHAR, mac); // read the MAC address inside the modulea
-#else
- // hw reset
- reg_wr(MR, 0x80);
- wait_us(500); // 500us (w5500)
-#endif
-
+#if defined(USE_WIZ550IO_MAC)
// write MAC address inside the WZTOE MAC address register
reg_wr_mac(SHAR, mac);
-
+#endif
// set RX and TX buffer size
#if 0
for (int socket = 0; socket < MAX_SOCK_NUM; socket++) {
@@ -378,7 +374,7 @@
}
cs = 1;
-#if DBG_SPI
+#if DBG_SPI
debug("[SPI]W %04x(%02x %d)", addr, cb, len);
for(int i = 0; i < len; i++) {
debug(" %02x", buf[i]);
@@ -471,23 +467,54 @@
debug("\n");
}
-int ethernet_link(void) {
-
- return ((uint8_t)(WIZnet_Chip::getPHYCFGR())& 0x01);
+int WIZnet_Chip::ethernet_link(void) {
+ int val = getPHYCFGR();
+ return (val&0x01);
}
-void ethernet_set_link(int speed, int duplex) {
+void WIZnet_Chip::ethernet_set_link(int speed, int duplex) {
uint32_t val=0;
if((speed < 0) || (speed > 1)) {
val = (PHYCFGR_OPMDC_ALLA)<<3;
} else {
val = (((speed&0x01)<<1)+ (duplex&0x01))<<3;
}
- WIZnet_Chip::setPHYCFGR((uint8_t)(PHYCFGR_RST&(PHYCFGR_OPMD|val)));
+ setPHYCFGR((uint8_t)(PHYCFGR_RST&(PHYCFGR_OPMD|val)));
wait(0.2);
- WIZnet_Chip::setPHYCFGR((uint8_t)((~PHYCFGR_RST)|(PHYCFGR_OPMD|val)));
+ setPHYCFGR((uint8_t)((~PHYCFGR_RST)|(PHYCFGR_OPMD|val)));
wait(0.2);
}
+ void WIZnet_Chip::reg_rd_mac(uint16_t addr, uint8_t* data) {
+ spi_read(addr, 0x00, data, 6);
+ }
+
+ void WIZnet_Chip::reg_wr_ip(uint16_t addr, uint8_t cb, const char* ip) {
+ uint8_t buf[4];
+ char* p = (char*)ip;
+ for(int i = 0; i < 4; i++) {
+ buf[i] = atoi(p);
+ p = strchr(p, '.');
+ if (p == NULL) {
+ break;
+ }
+ p++;
+ }
+ spi_write(addr, cb, buf, sizeof(buf));
+ }
+
+ void WIZnet_Chip::sreg_ip(int socket, uint16_t addr, const char* ip) {
+ reg_wr_ip(addr, (0x0C + (socket << 5)), ip);
+ }
+
+ void WIZnet_Chip::reg_rd_ip_byte(uint16_t addr, uint8_t* data) {
+ spi_read(addr, 0x00, data, 4);
+ }
+
+ void WIZnet_Chip::reg_wr_ip_byte(uint16_t addr, uint8_t* data) {
+ spi_write(addr, 0x04, data, 4);
+ }
+
+
#endif
--- a/arch/ext/W5500.h Tue Jun 16 13:03:28 2015 +0900
+++ b/arch/ext/W5500.h Wed Jun 17 00:24:45 2015 +0000
@@ -151,7 +151,6 @@
HalfDuplex100 = 3,
FullDuplex100 = 4,
};
-
class WIZnet_Chip {
public:
enum Protocol {
@@ -350,11 +349,13 @@
return *reinterpret_cast<T*>(buf);
}
- void reg_rd_mac(uint16_t addr, uint8_t* data) {
+ void reg_rd_mac(uint16_t addr, uint8_t* data);
+/* {
spi_read(addr, 0x00, data, 6);
- }
+ }*/
- void reg_wr_ip(uint16_t addr, uint8_t cb, const char* ip) {
+ void reg_wr_ip(uint16_t addr, uint8_t cb, const char* ip);
+ /* {
uint8_t buf[4];
char* p = (char*)ip;
for(int i = 0; i < 4; i++) {
@@ -367,18 +368,21 @@
}
spi_write(addr, cb, buf, sizeof(buf));
}
-
- void sreg_ip(int socket, uint16_t addr, const char* ip) {
+ */
+ void sreg_ip(int socket, uint16_t addr, const char* ip);
+/* {
reg_wr_ip(addr, (0x0C + (socket << 5)), ip);
- }
+ }*/
- void reg_rd_ip_byte(uint16_t addr, uint8_t* data) {
+ void reg_rd_ip_byte(uint16_t addr, uint8_t* data);
+/* {
spi_read(addr, 0x00, data, 4);
- }
+ }*/
- void reg_wr_ip_byte(uint16_t addr, uint8_t* data) {
+ void reg_wr_ip_byte(uint16_t addr, uint8_t* data);
+/* {
spi_write(addr, 0x04, data, 4);
- }
+ }*/
/////////////////////////////////
// Common Register I/O function //
@@ -623,7 +627,7 @@
* @return uint8_t. Value of @ref PHYCFGR register.
* @sa getPHYCFGR()
*/
- uint8_t getPHYCFGR() {
+ uint8_t getPHYCFGR() {
return reg_rd<uint8_t>(PHYCFGR);
}
@@ -978,6 +982,8 @@
}
+ int ethernet_link(void);
+ void ethernet_set_link(int speed, int duplex);
protected:
uint8_t mac[6];
uint32_t ip;
@@ -986,22 +992,19 @@
uint32_t dnsaddr;
bool dhcp;
-
-
+ void spi_write(uint16_t addr, uint8_t cb, const uint8_t *buf, uint16_t len);
+ void spi_read(uint16_t addr, uint8_t cb, uint8_t *buf, uint16_t len);
+ SPI* spi;
+ DigitalOut cs;
+ DigitalOut reset_pin;
static WIZnet_Chip* inst;
void reg_wr_mac(uint16_t addr, uint8_t* data) {
spi_write(addr, 0x04, data, 6);
}
- void spi_write(uint16_t addr, uint8_t cb, const uint8_t *buf, uint16_t len);
- void spi_read(uint16_t addr, uint8_t cb, uint8_t *buf, uint16_t len);
- SPI* spi;
- DigitalOut cs;
- DigitalOut reset_pin;
};
-extern int ethernet_link(void);
-extern void ethernet_set_link(int speed, int duplex);
+
extern uint32_t str_to_ip(const char* str);
extern void printfBytes(char* str, uint8_t* buf, int len);
--- a/arch/int/W7500x_toe.cpp Tue Jun 16 13:03:28 2015 +0900
+++ b/arch/int/W7500x_toe.cpp Wed Jun 17 00:24:45 2015 +0000
@@ -481,11 +481,11 @@
idle_MDIO(GPIOx);
}
-int ethernet_link(void) {
+int WIZnet_Chip::ethernet_link(void) {
return ((mdio_read(GPIO_MDC, PHYREG_STATUS)>>SVAL)&0x01);
}
-void ethernet_set_link(int speed, int duplex) {
+void WIZnet_Chip::ethernet_set_link(int speed, int duplex) {
uint32_t val=0;
if((speed < 0) || (speed > 1)) {
val = CNTL_AUTONEGO;
@@ -494,5 +494,37 @@
}
mdio_write(GPIO_MDC, PHYREG_CONTROL, val);
}
+
+ void WIZnet_Chip::reg_rd_mac(uint16_t addr, uint8_t* data)
+ {
+ data[0] = *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+3));
+ data[1] = *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+2));
+ data[2] = *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+1));
+ data[3] = *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+0));
+ data[4] = *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+7));
+ data[5] = *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+6));
+ }
+
+ void WIZnet_Chip::reg_wr_ip(uint16_t addr, uint8_t cb, const char* ip)
+ {
+ uint8_t buf[4]={0,};
+ uint32_t wr_ip = 0;
+ char* p = (char*)ip;
+
+ for(int i = 0; i < 4; i++) {
+ wr_ip = (wr_ip<<8);
+ buf[i] = atoi(p);
+ wr_ip |= buf[i];
+ p = strchr(p, '.');
+ if (p == NULL) break;
+ p++;
+ }
+ *(volatile uint32_t *)(W7500x_WZTOE_BASE + (uint32_t)((cb<<16)+addr)) = wr_ip;
+ }
+
+ void WIZnet_Chip::sreg_ip(int socket, uint16_t addr, const char* ip) {
+ reg_wr_ip(addr, (uint8_t)(0x01+(socket<<2)), ip);
+ }
+
#endif
--- a/arch/int/W7500x_toe.h Tue Jun 16 13:03:28 2015 +0900
+++ b/arch/int/W7500x_toe.h Wed Jun 17 00:24:45 2015 +0000
@@ -249,7 +249,7 @@
template<typename T>
T reg_rd(uint16_t addr, uint8_t cb) {
- uint8_t buf[sizeof(T)];
+ uint8_t buf[sizeof(T)] = {0,};
for(int i = 0; i < sizeof(buf); i++) { // Little Endian to Big Endian
buf[i] = *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)((cb<<16)+addr)+i);
}
@@ -263,33 +263,16 @@
return *reinterpret_cast<T*>(buf);
}
- void reg_rd_mac(uint16_t addr, uint8_t* data) {
- data[0] = *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+3));
- data[1] = *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+2));
- data[2] = *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+1));
- data[3] = *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+0));
- data[4] = *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+7));
- data[5] = *(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+6));
- }
+ void reg_rd_mac(uint16_t addr, uint8_t* data);
+
+ void reg_wr_ip(uint16_t addr, uint8_t cb, const char* ip);
- void reg_wr_ip(uint16_t addr, uint8_t cb, const char* ip) {
- uint8_t buf[4];
- uint32_t wr_ip = 0;
- char* p = (char*)ip;
- for(int i = 0; i < 4; i++) {
- wr_ip = (wr_ip<<8);
- buf[i] = atoi(p);
- wr_ip |= buf[i];
- p = strchr(p, '.');
- if (p == NULL) break;
- p++;
- }
- *(volatile uint32_t *)(W7500x_WZTOE_BASE + (uint32_t)((cb<<16)+addr)) = wr_ip;
- }
+ void sreg_ip(int socket, uint16_t addr, const char* ip);
- void sreg_ip(int socket, uint16_t addr, const char* ip) {
- reg_wr_ip(addr, (uint8_t)(0x01+(socket<<2)), ip);
- }
+ int ethernet_link(void);
+
+ void ethernet_set_link(int speed, int duplex);
+
protected:
uint8_t mac[6];
@@ -310,8 +293,6 @@
*(volatile uint8_t *)(W7500x_WZTOE_BASE + (uint32_t)(addr+6)) = data[5] ;
}
};
-extern int ethernet_link(void);
-extern void ethernet_set_link(int speed, int duplex);
extern uint32_t str_to_ip(const char* str);
extern void printfBytes(char* str, uint8_t* buf, int len);
