- Netduino Forums
- → pascal06's Content
pascal06's Content
There have been 95 items by pascal06 (Search limited from 24-June 23)
#2759 uIP Introduction
Posted by
pascal06
on 24 September 2010 - 02:17 PM
in
General Discussion
#2764 PCB Layout
Posted by
pascal06
on 24 September 2010 - 02:59 PM
in
General Discussion
I have downloaded the zip file of the Netduino board. The file type is .BRD and I would like to know how
to open this file. I tried to use Eagle with no luck.
Any enlightenment will be appreciated.
Vic
Hello Vic,
Here is a answer from Chris:
http://forums.netdui...rd-layout-file/
Pascal
#2823 uIP Introduction
Posted by
pascal06
on 24 September 2010 - 09:11 PM
in
General Discussion
#2865 Default behaviour
Posted by
pascal06
on 25 September 2010 - 09:37 AM
in
Netduino Plus 2 (and Netduino Plus 1)
I've just found out that by default the netduino plus is responding to icmp(ping) requests..
Is this the only default behaviour of the network stack? or are there more services that run?
And.. can I disable this behaviour?
This is the default of all ip stack without firewall. This is true for any kind of network product.
Why you want to disable it ?
Pascal
#2884 Wrong network addressing breaks netduino plus
Posted by
pascal06
on 25 September 2010 - 04:14 PM
in
Netduino Plus 2 (and Netduino Plus 1)
![:)](http://forums.netduino.com/public/style_emoticons/default/smile.png)
#2889 How to use the new functionalities
Posted by
pascal06
on 25 September 2010 - 06:34 PM
in
Netduino Plus 2 (and Netduino Plus 1)
#2915 Anyone interested in an eagle version of the Netduino files?
Posted by
pascal06
on 26 September 2010 - 10:28 AM
in
General Discussion
#2926 build from Scratch
Posted by
pascal06
on 26 September 2010 - 01:26 PM
in
General Discussion
I´m planning build Netduino from scratch (board, solder)
I have a question.
How to burn firmware in processor?
Thanks
If you realy want to start from strach (good luck to solder the MCU
![:)](http://forums.netduino.com/public/style_emoticons/default/smile.png)
http://www.atmel.com...sp?tool_id=3883
After, you can use MFDeploy to burn the firmware,
Good luck,
Pascal
#3110 Emulator Firmware
Posted by
pascal06
on 28 September 2010 - 01:10 PM
in
Netduino Plus 2 (and Netduino Plus 1)
![;)](http://forums.netduino.com/public/style_emoticons/default/wink.png)
#3113 Nokia 3310 from nuelectronics
Posted by
pascal06
on 28 September 2010 - 01:38 PM
in
Project Showcase
Hi Pascal,
What are the pinouts you used to interface between the netduino and the 3310 lcd?
PipZ
Hello PipZ,
I use the nuelectronics shield, pinouts can be found in this schematics:
http://www.nuelectro...ia_3310_lcd.pdf
Strip the joystick part, it's not compatible with netduino due to 3v3 vs 5v.
Pascal
#3346 MS ARM Compiler support
Posted by
pascal06
on 01 October 2010 - 11:48 AM
in
General Discussion
#3371 multiple shields
Posted by
pascal06
on 01 October 2010 - 05:23 PM
in
Netduino 2 (and Netduino 1)
You need to check if a shields doesn't use the same pin as another ... Look at schematic of each shield,
And some shield are designed to be the last shield, like lcd,
Chris is the winner,
Pascal
#3498 Netbios
Posted by
pascal06
on 04 October 2010 - 09:30 PM
in
Netduino Plus 2 (and Netduino Plus 1)
Netbios name resolution can be a easy way to communicate with a NetduinoPlus. Especialy in case of using DHCP. With this feature, you can use (only on local subnet) the name of your Netduino instead of using IP address. But, it seems that NetduinoPlus doesn't support local broadcast UDP. My sample works on Emulator, but not on NetduinoPlus.
using System; using System.Threading; using Microsoft.SPOT; using System.Net.Sockets; using System.Net; using Microsoft.SPOT.Net.NetworkInformation; namespace Netbios { public class Program { private const int UDP_PORT_NETBIOS_NS = 137; public static Byte[] EncodeNetbiosName(string Name) { byte[] result = new byte[32]; char c; for (int i = 0; i < 15; i++) { c = i < Name.Length ? Name[i] : ' '; result[i * 2] = (byte)(((byte)(c) >> 4) + 65); result[(i * 2) + 1] = (byte)(((byte)(c) & 0x0f) + 65); } result[30] = 0x41; result[31] = 0x41; return result; } public static string DecodeNetbiosName(byte[] NbName) { string result = ""; for (int i = 0; i < 15; i++) { byte b1 = NbName[i * 2]; byte b2 = NbName[(i * 2) + 1]; char c = (char)( ( (b1 - 65) << 4 ) | ( b2 - 65 ) ); result += c; } return result; } public static bool BytesEqual(byte[] Array1, int Start1, byte[] Array2, int Start2, int Count) { bool result = true; for (int i = 0; i < Count - 1; i++) { if (Array1[i + Start1] != Array2[i + Start2]) { result = false; break; } } return result; } public static void Main() { byte[] myNbName = EncodeNetbiosName("NETDUINO"); NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); using (Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) { EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, UDP_PORT_NETBIOS_NS); byte[] IP = IPAddress.Parse(networkInterfaces[0].IPAddress).GetAddressBytes(); serverSocket.Bind(remoteEndPoint); while (true) { if (serverSocket.Poll(1000, //timeout in micro seconds SelectMode.SelectRead)) { byte[] inBuffer = new byte[serverSocket.Available]; int count = serverSocket.ReceiveFrom(inBuffer, ref remoteEndPoint); if ((inBuffer[2] >> 3) == 0) // opcode == 0 { byte[] nbName = new byte[32]; Array.Copy(inBuffer, 13, nbName, 0, 32); Debug.Print("NETBIOS NAME QUERY: "+DecodeNetbiosName(nbName)); if (BytesEqual(inBuffer, 13, myNbName, 0, 32)) { byte[] outBuffer = new byte[62]; outBuffer[0] = inBuffer[0]; // trnid outBuffer[1] = inBuffer[1]; // trnid outBuffer[2] = 0x85; outBuffer[3] = 0x00; outBuffer[4] = 0x00; outBuffer[5] = 0x00; outBuffer[6] = 0x00; outBuffer[7] = 0x01; outBuffer[8] = 0x00; outBuffer[9] = 0x00; outBuffer[10] = 0x00; outBuffer[11] = 0x00; outBuffer[12] = 0x20; for (int i = 0; i < 32; i++) { outBuffer[i + 13] = myNbName[i]; } outBuffer[45] = 0x00; outBuffer[46] = 0x00; outBuffer[47] = 0x20; // RR_TYPE: NB outBuffer[48] = 0x00; outBuffer[49] = 0x01; // RR_CLASS: IN outBuffer[50] = 0x00; // TTL outBuffer[51] = 0x0f; outBuffer[52] = 0x0f; outBuffer[53] = 0x0f; outBuffer[54] = 0x00; outBuffer[55] = 0x06; // RDLENGTH outBuffer[56] = 0x60; outBuffer[57] = 0x00; // NB_FLAGS outBuffer[58] = IP[0]; outBuffer[59] = IP[1]; outBuffer[60] = IP[2]; outBuffer[61] = IP[3]; serverSocket.SendTo(outBuffer, remoteEndPoint); } } } Thread.Sleep(100); } } } } }
To test this program, run it on emulator and try to ping NETDUINO with a computer connected on the same subnet.
Is it possible to change the configuration of lwIP to support udp local broadcast ?
Pascal
#3519 Netbios
Posted by
pascal06
on 05 October 2010 - 09:39 AM
in
Netduino Plus 2 (and Netduino Plus 1)
Quite possibly. lwIP is a bit of a black box of sorts, but we can look into it.
Please note that the emulator on Windows probably uses RTIP (the commercial stack) or Microsoft's IP stack instead of lwIP--so you may different behavior in the emulator than on an open-source .NET MF device.
Chris
Thanks Chris,
For me, the emulator use the host windows stack because the emulator is 100% written with managed code.
I have tested my program on a TAOHE-II which use RTIP, and it works.
So, my conclusion is the lwIP doesn't catch broadcast packets. I will also take a look on it.
A little question, how to see firmware debug message like LWIP_DEBUGF ....
Pascal
#3520 Emulator Firmware
Posted by
pascal06
on 05 October 2010 - 09:47 AM
in
Netduino Plus 2 (and Netduino Plus 1)
Hi pascal06,
Whenever we do large amounts of code, we use the Atmel AT91SAM7X-EK (the Atmel dev board), placing an AT91SAM7X512-AU chip on it. We've specifically made the Netduino firmware compatible with the EK board so that it's possible to use the Netduino firmware with it... [You might have to tweak SPI channels or cut traces for the SD to work--but that's about it].
We haven't tried to build code within an emulator--but technically .NET MF has a Windows port (used in the .NET MF Emulator) so it might be possible...
Chris
After some research, it seems that the Emulator works only with managed code. So, it's great to simulate C# project, but it seems that not possible to use any firmeware (native code) with it,
Pascal
#3521 Netbios
Posted by
pascal06
on 05 October 2010 - 10:07 AM
in
Netduino Plus 2 (and Netduino Plus 1)
Quite possibly. lwIP is a bit of a black box of sorts, but we can look into it.
Chris,
To be able to receive a udp local broadcast, we need to be able to receive ethernet broadcast.
Look at line 45 in AT91_EMAC_lwip.h:
static const UINT32 EMAC_NBC = (0x1ul << 5); // (EMAC) No broadcast.
It seems that MAC layer is configured to not catch any broadcast packet.
Thought ?
Pascal
#3585 Firmware build issues
Posted by
pascal06
on 06 October 2010 - 08:54 PM
in
Netduino 2 (and Netduino 1)
Curious. We'll do a clean build and play with both RVDS and GCC compilation to see if we can help make it easier...
It seems that environment variables was changed between RVDS 4.0 and RVDS 4.1.
I'm successful with both Netduino & NetduinoPlus with this setenv_RVDS4.1.cmd content :
@echo off set RVCT40BIN=%ARMCC41BIN% set RVCT40INC=%ARMCC41INC% set RVCT40LIB=%ARMCC41LIB% setenv_base.cmd RVDS4.0 PORT
Without any files move or other files modifications,
Hope can help others,
Pascal
#3635 Netbios
Posted by
pascal06
on 07 October 2010 - 09:33 PM
in
Netduino Plus 2 (and Netduino Plus 1)
Look at line 45 in AT91_EMAC_lwip.h:
static const UINT32 EMAC_NBC = (0x1ul << 5); // (EMAC) No broadcast.
That's not the right direction. I'm able now, with some firmware modifications, to send debug messages to COM1. And after putting messages on ip.c and udp.c, I can see that my NetduinoPlus receive UDP even if this is a local broadcast and the EMAC_NBC register is enabled. So, I will continue to search why these broadcast are not catched by my application.
DM9161_AutoNegotiate Valid PHY Found: 31 PHY: Vendor Number Model = 0xA PHY: Model Revision Number = 0x0 AutoNegotiate complete DM9161_GetLinkSpeed passed Link detected 0x0 ip address from interface info: 192.168.5.100 .NetMF v4.1.2821.0 NetduinoPlus, Build Date:Oct 7 2010 23:03:52 ARM Compiler version 410462 TinyCLR (Build 4.1.2821.0) Starting... Created EE.Started Hardware. No debugger! // Extra lines removed // Ready. IP Received UDP Received IP Received UDP Received IP Received UDP Received IP Received UDP Received IP Received UDP Received IP Received IP Received UDP Received IP Received IP Received
Pascal
#3662 Framework Install error
Posted by
pascal06
on 08 October 2010 - 02:25 PM
in
Visual Studio
#3706 Netbios
Posted by
pascal06
on 09 October 2010 - 09:49 AM
in
Netduino Plus 2 (and Netduino Plus 1)
Could you post your current code? If I get a chance I will load it on my N+ this weekend and have a look.
Thanks Charles,
But I found the way to solve the issue
![:rolleyes:](http://forums.netduino.com/public/style_emoticons/default/rolleyes.gif)
We need to disable IP_SOF_BROADCAST_RECV define in opt.h. This a filter at pcb level to drop any broadcast.
Instead of changing the firmware, I also see that we can leave this define as it is, and enable the pcb options SOF_BROADCAST to also solve this issue. I just need to find the way to enable it at C# level.
Pascal
#3708 Netbios
Posted by
pascal06
on 09 October 2010 - 12:33 PM
in
Netduino Plus 2 (and Netduino Plus 1)
It seems that we have a issue on both AT91 EMAC & ENC28J60 driver.
Usualy, we need to enable some flags to define interface capability.
And that's not the case on both driver, here my proposal modification for Netduino :
err_t AT91_EMAC_ethhw_init(struct netif *myNetIf) { myNetIf->mtu = AT91_EMAC_MAX_FRAME_SIZE; /* ethhw_init() is user-defined */ /* use ip_input instead of ethernet_input for non-ethernet hardware */ /* (this function is assigned to netif.input and should be called by the hardware driver) */ /* Assign the xmit routine to the stack's netif and call the driver's Open */ myNetIf->output = etharp_output; myNetIf->linkoutput = AT91_EMAC_LWIP_xmit; myNetIf->status_callback = AT91_EMAC__status_callback; // [DP CHANGE] myNetIf->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP; AT91_EMAC_LWIP_open( myNetIf ); return 0; }
And with this modification, I see another good side effect, now my Netduino send a gratuitus ARP when it start. Which is a usualy behavior.
So, we also need to modify my Netbios program to enable Broadcast receive at socket level (which is not necessary with RTIP). Here the final code for Netbios :
using System; using System.Threading; using Microsoft.SPOT; using System.Net.Sockets; using System.Net; using Microsoft.SPOT.Net.NetworkInformation; namespace Netbios { public class Program { private const int UDP_PORT_NETBIOS_NS = 137; public static Byte[] EncodeNetbiosName(string Name) { byte[] result = new byte[32]; char c; for (int i = 0; i < 15; i++) { c = i < Name.Length ? Name[i] : ' '; result[i * 2] = (byte)(((byte)(c) >> 4) + 65); result[(i * 2) + 1] = (byte)(((byte)(c) & 0x0f) + 65); } result[30] = 0x41; result[31] = 0x41; return result; } public static string DecodeNetbiosName(byte[] NbName) { string result = ""; for (int i = 0; i < 15; i++) { byte b1 = NbName[i * 2]; byte b2 = NbName[(i * 2) + 1]; char c = (char)(((b1 - 65) << 4) | (b2 - 65)); result += c; } return result; } public static bool BytesEqual(byte[] Array1, int Start1, byte[] Array2, int Start2, int Count) { bool result = true; for (int i = 0; i < Count - 1; i++) { if (Array1[i + Start1] != Array2[i + Start2]) { result = false; break; } } return result; } public static void Main() { Thread.Sleep(10000); byte[] myNbName = EncodeNetbiosName("NETDUINO"); NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); using (Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) { serverSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true); // Enable broadcast EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, UDP_PORT_NETBIOS_NS); byte[] IP = IPAddress.Parse(networkInterfaces[0].IPAddress).GetAddressBytes(); serverSocket.Bind(remoteEndPoint); while (true) { if (serverSocket.Poll(1000, //timeout in micro seconds SelectMode.SelectRead)) { byte[] inBuffer = new byte[serverSocket.Available]; int count = serverSocket.ReceiveFrom(inBuffer, ref remoteEndPoint); if ((inBuffer[2] >> 3) == 0) // opcode == 0 { byte[] nbName = new byte[32]; Array.Copy(inBuffer, 13, nbName, 0, 32); Debug.Print("NETBIOS NAME QUERY: " + DecodeNetbiosName(nbName)); if (BytesEqual(inBuffer, 13, myNbName, 0, 32)) { byte[] outBuffer = new byte[62]; outBuffer[0] = inBuffer[0]; // trnid outBuffer[1] = inBuffer[1]; // trnid outBuffer[2] = 0x85; outBuffer[3] = 0x00; outBuffer[4] = 0x00; outBuffer[5] = 0x00; outBuffer[6] = 0x00; outBuffer[7] = 0x01; outBuffer[8] = 0x00; outBuffer[9] = 0x00; outBuffer[10] = 0x00; outBuffer[11] = 0x00; outBuffer[12] = 0x20; for (int i = 0; i < 32; i++) { outBuffer[i + 13] = myNbName[i]; } outBuffer[45] = 0x00; outBuffer[46] = 0x00; outBuffer[47] = 0x20; // RR_TYPE: NB outBuffer[48] = 0x00; outBuffer[49] = 0x01; // RR_CLASS: IN outBuffer[50] = 0x00; // TTL outBuffer[51] = 0x0f; outBuffer[52] = 0x0f; outBuffer[53] = 0x0f; outBuffer[54] = 0x00; outBuffer[55] = 0x06; // RDLENGTH outBuffer[56] = 0x60; outBuffer[57] = 0x00; // NB_FLAGS outBuffer[58] = IP[0]; outBuffer[59] = IP[1]; outBuffer[60] = IP[2]; outBuffer[61] = IP[3]; serverSocket.SendTo(outBuffer, remoteEndPoint); } } } Thread.Sleep(100); } } } } }
Now, I will test if this modification have any effect regarding unknow IP commuication. When you try to communcate to a IP which is not respond to a ARP request.
Pascal
#3716 Netbios
Posted by
pascal06
on 09 October 2010 - 03:26 PM
in
Netduino Plus 2 (and Netduino Plus 1)
Regarding ARP request issue, I found this (funny) etharp.c :
/** * Clears expired entries in the ARP table. * * This function should be called every ETHARP_TMR_INTERVAL microseconds (5 seconds), * in order to expire entries in the ARP table. */ void etharp_tmr(void) { u8_t i; LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer\n")); /* remove expired entries from the ARP table */ for (i = 0; i < ARP_TABLE_SIZE; ++i) { arp_table[i].ctime++; if (((arp_table[i].state == ETHARP_STATE_STABLE) && (arp_table[i].ctime >= ARP_MAXAGE)) || ((arp_table[i].state == ETHARP_STATE_PENDING) && (arp_table[i].ctime >= ARP_MAXPENDING))) { /* pending or stable entry has become old! */ LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired %s entry %"U16_F".\n", arp_table[i].state == ETHARP_STATE_STABLE ? "stable" : "pending", (u16_t)i)); /* clean up entries that have just been expired */ /* remove from SNMP ARP index tree */ snmp_delete_arpidx_tree(arp_table[i].netif, &arp_table[i].ipaddr); #if ARP_QUEUEING /* and empty packet queue */ if (arp_table[i].q != NULL) { /* remove all queued packets */ LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: freeing entry %"U16_F", packet queue %p.\n", (u16_t)i, (void *)(arp_table[i].q))); free_etharp_q(arp_table[i].q); arp_table[i].q = NULL; } #endif /* recycle entry for re-use */ arp_table[i].state = ETHARP_STATE_EMPTY; } #if ARP_QUEUEING /* still pending entry? (not expired) */ if (arp_table[i].state == ETHARP_STATE_PENDING) { /* resend an ARP query here? */ } #endif } }
It seems that lwip need to be improved ... Strange,
For me, yes we need to resend ARP and after a (configurable) number of time, we need to generate a exception,
I will try to populate this part of code ...
Pascal
#3722 Netbios
Posted by
pascal06
on 09 October 2010 - 05:11 PM
in
Netduino Plus 2 (and Netduino Plus 1)
Hmm, very interesting. Are you using RVDS to compile your code? Would you like us to compile in a set of changes that you can test?
I use RVDS 4.1 Pro Evaluation, expire in 26 days. I have some time to fix it
![:)](http://forums.netduino.com/public/style_emoticons/default/smile.png)
Pascal
#3724 Netbios
Posted by
pascal06
on 09 October 2010 - 06:01 PM
in
Netduino Plus 2 (and Netduino Plus 1)
Okay, cool. Thanks for your help and contributions on this!
Chris
In lwip, we have multiple timers, to timeout when a event not occurs in certain time, or others proposes.
Timer logic is on sys.c, and inititialisation of all timers is on tcpip.c. But it seems that this timer doesn't work. I have put some message and no timer event occurs, never !!!
I cannot debug, because the firmware cannot be compiled with debug flavor (to big).
Do you have a way in your side to check if these timers works ?
As a example, arp_timer in tcpip.c should be fire every 5 seconds, and it's not the case.
Pascal
#3780 Features of NetDuino
Posted by
pascal06
on 11 October 2010 - 08:25 PM
in
General Discussion
Perhaps you're already on this road, but when the getting started guide comes out, if it could be in a wiki or some other community-editable format, that would be great. If you need a suggestion for wiki software, I like the Screwturn wiki, it's very simple, open source, and .net based.
Full disclosure: I'm listed as a contributor to the Screwturn project, but my contributions were more by accident than intentional...
+1 for a Netduino Wiki
+1 for Screwturn, very efficient
Pascal
- Netduino Forums
- → pascal06's Content
- Privacy Policy