We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I send data from evaluation board MCB2300 (with LPC 2378 microprocessor) to a user's PC via Ethernet using TCP/IP protocol. A program named Ethereal shows that MCB2300 transfers 1024 bytes segment during 7-8 ms after ACK is received from PC. Why the transfer is so low? (Program sample is EasyWeb).
What is "low tcp/ip"? What is "transfer is so low"?
Are you talking about the MTU (Maximum Transmission Unit) or the 7-8 ms or something else?
It helps to be very clear when asking a question.
When discussing transfer speeds, you talk about megabit/s or megabyte/s or similar.
I send 4 Kbytes from MCB2300 to PC. Outgoing TCP data size = 1 Kbytes. 1 Kbyte was sent. The MCB2300 board got ACK from PC. The board sends next 1 Kbyte after 7-8 ms. What should I do to reduce this time? Total transfer time for 4Kbyte is 40 ms.
I don't use this product, so I don't have access to all information.
Check what options you have for configuring memory and sliding window size. If you can't find anything about sliding window support (many outstanding TCP messages before stopping to wait for an acknowledge) then you may have to call Keil support and check if the stack supports this. Without sliding window support, your transfer rate will be greatly affected by the ping times.
I use Keil tutorial program EASYWEB for Keil MCB2300. While initializing the EMAC ethernet controller I configure 100MBit mode. Real speed is 800 Kbit per second. That is my question to Keil company: Why the MCB2300 board works like a turtle?
Two things.
1) You are not asking the "Keil company" anything. You are asking end users on a forum hosted by Keil. Check the "Support" link in the page header for how to send an official support request.
2) You are missing my point. This is not a question of 100Mbit or 10Mbit mode. 100Mbit mode means that the bits within a packet has a timing of 100Mbit/s. But that does not mean that a 100Mbit interface can transfer 12.5MB/s. It only says the baudrate inside a packet. Even a PC has a hard time to reach 50% efficiency, i.e. 50Mbit/s effective transfer rates.
My post was about how many packages the TCP/IP stack can have outstanding, before receiving an acknowledge from the other side. A stack running with only a single packet outstanding will use a stop-and-go mode. One packet is sent. One acknowledge is received. A new packet is sent. In such a configuration, the total transfer capacity will be greatly affected by the ping times, i.e. the turn-around time from that you send a data packet until the acknowledge is received so a new packet can be sent.
Have you checked if there are any memory or configuration options for number of outstanding packets? Any setting for sliding window? An embedded device does not have as much RAM as a PC, so it can't really run with large sliding windows and if the stack does support sliding windows, it will then be quite natural that the setting is minimized.
Are you using the Keil protocol stack? The Keil RL?
If so, what period have you got the TCP maintenance tick set to?
Our tests indicate that it is not a turtle; if you configure it to match your requirements!
I create project in Keil uVision. Algoritm on board is realized so that the TCP/IP stack can have 1 packet before receiving an acknowledge from PC. Yes this is no effect. But the question is : the board sends next packet only after 7-8 ms. I think that this is slowly or not?
I do not Keil RL.
"I do not Keil RL."
I would suggest you consider doing so - Or an equivalent.
Our tests show performance is very good.
Really ? Gladly believe. What time will be measured at your miracle test? Do me favour: 1. You run timer at PC and send request to the board 2. The board wil send 4K to PC after request receiving 3. PC receives 4K and stops the timer 4. What is measured time? P.S. Data are transfered via Ethernet (TCP/IP) Best regards
When we were conducting our tests, we transmitted 16Kb blocks.
Each TCP packet was 1Kb, so there were 16 transmissions.
It initially took 7.6ms to send the complete 16Kb block.
By increasing the TCP tick frequency, we could achieve the same transfer in 4.2ms.
Very acceptable.
Please tell me : What is TCP tick? How can I increase the TCP tick frequency without RL?
The TCP tick is the name given to the TCP internal maintenance call.
In the Keil TCP implementation, it is called by
timer_tick();
So you must call it more frequently.
I set in program: 1. wait max. 8 x 262ms for an ACK (about 2 sec.) 2. max. time to wait for an ACK of a FIN before closing TCP state-machine (about 0.5 s). What is TCP tick frequency?
I DO NOT have Keil RL.I use Keil evaluation kit. Is it possible to program Ethernet controller registers for MCB2300 (LPC 2378)?