11:10 pm on Nov 1, 2012 | read the article | tags: hobby
for a week or so i’m searching the internet for a simple example (that can be easily expanded) on how to use the pic32-pinguino-otg with a UEXT connected enc28j60 module (both from olimex). and of course i didn’t wanted to use the “universal” microchip tcp/ip stack that requires MPlab. after digging quite a lot trough the pinguino repositories, i managed to compile a set of working header files (which you can find here) and a small program from which you can ping your boards. for the library to work, copy it under %pinguino/p32/include/pinguino/libraries/ethernet, where %pinguino is the path to your pinguino installation folder. i used pinguino X.3 and it compiled fine.
/*-----------------------------------------------------
Author: --<>
Date: 28/Oct/2012
Description:
-----------------------------------------------------*/
#include <ethernet/ip_arp_udp.h>
#define BUFFER_MAX 224
static u8 buf[BUFFER_MAX+1]; // the received message
u16 len; // the length of the received messages
void setup() {
// put your setup code here, to run once:
// this is the enc28j60 ip address
u8 myip[4] = { 192, 168, 2, 2 };
// this is the enc28j60 mac address
u8 mymac[6] = { 0x02, 0x04, 0x08, 0x10, 0x12, 0x14 };
init_ip_arp_udp (mymac, myip);
enc28j60Init (mymac);
}
void loop() {
len = enc28j60PacketReceive(BUFFER_MAX, buf);
CDC.printf("received! len: %d\n", len);
if (len == 0) {
return;
}
if(eth_type_is_arp_and_my_ip(buf, len)) {
make_arp_answer_from_request(buf, len);
return;
}
if(eth_type_is_ip_and_my_ip(buf, len)==0) {
return;
}
if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V) {
// the ping reply
make_echo_reply_from_request(buf, len);
return;
}
}
aceast sait folosește cookie-uri pentru a îmbunătăți experiența ta, ca vizitator. în același scop, acest sait utilizează modulul Facebook pentru integrarea cu rețeaua lor socială. poți accesa aici politica mea de confidențialitate.