WIZ820io mbed J2P1 GND ----- p1 GND J1P3 MOSI ---- p11 SPI(mosi) J2P6 MISO ---- p12 SPI(miso) J1P4 SCK ----- p13 SPI(sck) J1P5 nSS ----- p14 J2P5 nRESET -- p15 J2P3 3V3D ---- p40 VOUT J2P4 PWDN ---- GNDとりあえずmbedのハンドブックのようにイーサーネットのパケットを読み取れるまでは出来た。
しかし、なぜかmbedに比べてパケットサイズが極端に大きい。何か使い方を勘違いしてるのだろう。
#include "mbed.h" #include "w5100.h" Serial pc(USBTX, USBRX); extern W5100Class W5100; class MyEthernet { bool _init_flag; void _init() { W5100.init(); W5100.writeSnMR(0, 0x40|SnMR::MACRAW); // S0_MR_MACRAW(0x04) and MAC filter W5100.execCmdSn(0, Sock_OPEN); } public: MyEthernet() { _init_flag = false; } int receive() { if (!_init_flag) { _init_flag = true; _init(); } return W5100.readSnRX_RSR(0); } int read(char* data, int size) { int size2 = W5100.getRXReceivedSize(0); unsigned char *p = new unsigned char[size2]; W5100.recv_data_processing(0, p, size2); W5100.execCmdSn(0, Sock_RECV); int size3 = (int)(*p)<<8 | *(p+1); delete p; if (size3 > size) { size3 = size; } memcpy(data, p+2, size3); return size3; } }; MyEthernet eth2; int main() { pc.baud(460800); char buf[0x600]; while(1) { int size = eth2.receive(); if(size > 0) { printf("WIZ820io ethernet packet size: %d\n", size); eth2.read(buf, size); printf("Destination: %02X:%02X:%02X:%02X:%02X:%02X\n", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]); printf("Source: %02X:%02X:%02X:%02X:%02X:%02X\n", buf[6], buf[7], buf[8], buf[9], buf[10], buf[11]); } wait(1); printf("S0_RX_RSR:%d, S0_RX_RD:%d, S0_RX_WR:%d\n", W5100.readSnRX_RSR(0), W5100.readSnRX_RD(0), W5100.readSnRX_WR(0)); } }---
0 件のコメント:
コメントを投稿