|
|
  |
LwIP + LPC2468 без OS, Помогите прикрутить. |
|
|
|
Oct 28 2008, 07:25
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732

|
Я смог запустить uIP, работает всё, но почитал здесь пишут что LwIP побысрее будет. Скачал версию 1.3, взял для примера проект lwIPWeb (выкладывали ссылку в одной из тем). Прием TCP есть, а предачи нет. Подскажите где копать. При установлении TCP соединения вызывается функция: Код err_t accept(void *arg, struct tcp_pcb *newpcb, err_t err) { tcp_err(newpcb, err_callback); tcp_arg(newpcb, NULL); tcp_recv(newpcb, recv_callback); tcp_sent(newpcb, send_callback); tcp_poll(newpcb, poll_callback, 1);
return ERR_OK; } Далее при получении пакета вызываеся: Код err_t recv_callback(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) { char* rq; u32_t* newarg;
if (p != NULL) { if ( p->len ) { newarg = (u32_t*) mem_malloc(sizeof(u32_t)); *newarg = 5;
if (tcp_write(tpcb, &MyBuf[0], 5, 0) != ERR_OK) { mem_free(newarg); tcp_close(tpcb); } else { tcp_arg(tpcb, newarg); } } tcp_recved(tpcb, p->len); pbuf_free(p); }
return ERR_OK; Пробовал sdf} tcp_write возвращает ERR_OK, но на компе я не вижу ничего. Пинги идут. Опции lwipopts.h стандартные кроме того что я сам выставил Код #define SYS_LIGHTWEIGHT_PROT 0 #define NO_SYS 1
|
|
|
|
|
Oct 28 2008, 13:45
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732

|
Цитата(KRS @ Oct 28 2008, 17:17)  а tcp_tmr или tcp_slowtmr tcp_fasttmr вы вызываете? И fast и slow вызываю.
|
|
|
|
|
Oct 30 2008, 08:06
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732

|
tcp_output вызываеся потом из tcp_slowtmr и возвращает ERR_OK.
Поставил wireshark. Пишет что "TCP checksum incorrect". Checksum: 0xa33f [incorrect, should be 0x4e44 (maybe caused by "TCP checksum offload"?)] Поэтому я не вижу ответа от контроллера.
|
|
|
|
|
Nov 2 2008, 11:30
|

Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 22-06-06
Из: Киев
Пользователь №: 18 292

|
Цитата(virfis @ Oct 30 2008, 11:06)  tcp_output вызываеся потом из tcp_slowtmr и возвращает ERR_OK.
Поставил wireshark. Пишет что "TCP checksum incorrect". Checksum: 0xa33f [incorrect, should be 0x4e44 (maybe caused by "TCP checksum offload"?)] Поэтому я не вижу ответа от контроллера. На каком железе все это происходит?
|
|
|
|
|
Nov 3 2008, 08:47
|
Местный
  
Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970

|
Цитата(sergeeff @ Nov 2 2008, 22:59)  TCP checksum считает стек (LWIP, в данном случае), а аппаратно считается checksum ethernet кадра. Уважаемый, как раз вот этот случай Цитата Поставил wireshark. Пишет что "TCP checksum incorrect". Checksum: 0xa33f [incorrect, should be 0x4e44 (maybe caused by "TCP checksum offload"?)] Связан с тем, что wireshark пытается вычислять CRC пакетов (TCP, а не Ethernet), используя ресурсы сетевой платы (AFAIR), что вызывает данное сообщение даже для совершенно нормальных пакетов в совершенно нормальной сети. Спрашиваем Гугл и убираем галочку в настройках Wireshark. Потом уже смотрим и проверяем чексуммы.
|
|
|
|
|
Nov 3 2008, 09:00
|

Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 22-06-06
Из: Киев
Пользователь №: 18 292

|
Цитата(sergeeff @ Nov 2 2008, 14:55)  Чего-нибудь напахано с настройкой проекта под ARM. Можно посмотреть как это сделано, например, тут:http://www.freertos.org/portsam7xlwIP.html. Проверить правильности параметров упаковки структур и endian. Если пинги идут - упаковка структур должна быть правильной, проверено. Многие сетевые карты позволяют отключать аппаратную checsum в своих опциях (вкладка свойства - настроить - дополнительно)
|
|
|
|
|
Nov 5 2008, 07:09
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732

|
Прошу прощения что не отвечал. Интернет, да и вообще плата на работе. Все это происходит на плате Olimex LPC-E2468. Я подозревал что проблема контрольной суммы не в LwIP, потому что уже сам калькулятором пересчитывал и просматривал исходящий пакет при отладке через Jtag. Аппаратно отключить не удалось в свойсвах сетевой карты. Опцию "Аппаратный контроль суммы"отключил, но все равно пишет что неверная сумма. Может надо перегрузить систему, не пробовал. Я отключил валидацию TCP в Wireshark. Значит получается ситуация такая: Я попробовал соединиться с сервером на другом компе и сделать тот же обмен что и с контроллером. Вот что в логе снифера: 1 0.000000 192.168.0.7 192.168.0.11 TCP vpsipport > iec-104 [PSH, ACK] Seq=1 Ack=1 Win=65535 Len=6 2 0.027790 192.168.0.11 192.168.0.7 TCP iec-104 > vpsipport [PSH, ACK] Seq=1 Ack=7 Win=65529 Len=6 3 0.218945 192.168.0.7 192.168.0.11 TCP vpsipport > iec-104 [ACK] Seq=7 Ack=7 Win=65529 Len=0 И вроде все нормально. Теперь лог с контроллером: 1 0.000000 192.168.0.7 192.168.0.250 TCP 2194 > iec-104 [PSH, ACK] Seq=1 Ack=1 Win=65535 Len=6 2 0.001688 192.168.0.250 192.168.0.7 TCP iec-104 > 2194 [PSH, ACK] Seq=1 Ack=7 Win=1500 Len=6 3 2.390097 192.168.0.250 192.168.0.7 TCP [TCP Retransmission] iec-104 > 2194 [PSH, ACK] Seq=1 Ack=7 Win=1500 Len=6 4 2.994343 192.168.0.7 192.168.0.250 TCP [TCP Retransmission] 2194 > iec-104 [PSH, ACK] Seq=1 Ack=1 Win=65535 Len=6 5 2.994923 192.168.0.250 192.168.0.7 TCP [TCP Dup ACK 3#1] iec-104 > 2194 [ACK] Seq=7 Ack=7 Win=1500 Len=0 6 7.389978 192.168.0.250 192.168.0.7 TCP [TCP Retransmission] iec-104 > 2194 [PSH, ACK] Seq=1 Ack=7 Win=1500 Len=6 7 8.889848 192.168.0.250 192.168.0.7 TCP iec-104 > 2194 [PSH, ACK] Seq=7 Ack=7 Win=1500 Len=6
Значит здесь так: 7-й адрес мой, 11-й другой комп, 250-контроллер. Единственную разницу что вижу, это в ответе от контроллера window size не 65529, а 1500. И еще - в ответе от контроллера вместо нужных 6-ти байт нули. Вот такое вот дела у меня.
|
|
|
|
|
Nov 5 2008, 08:09
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732

|
Интересное наблюдение. Изменил последний параметр при вызове tcp_write на 1 и стало нормально все доходить. Но только после каждого отправленного пакета разрывает соединение. Приходится переустанавливать заново.
|
|
|
|
|
Nov 5 2008, 08:35
|

Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 22-06-06
Из: Киев
Пользователь №: 18 292

|
Цитата(virfis @ Nov 5 2008, 10:09)  Прошу прощения что не отвечал. Интернет, да и вообще плата на работе. Все это происходит на плате Olimex LPC-E2468. А это смотрели? как заведен сигнал CRS? http://electronix.ru/forum/index.php?showtopic=53056
|
|
|
|
|
Nov 5 2008, 09:00
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732

|
Цитата А это смотрели? как заведен сигнал CRS? Смотрел, тоже заведено с ошибкой. Но проблема то не с приемом, прием 100%, а с передачей.
Сообщение отредактировал virfis - Nov 5 2008, 09:00
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|