Перейти к содержанию
    

сетевые настройки, забиваете фиксированный IP тот что у вас, маску подсети что определилась, шлюз и все такое...

в сетевом устройстве все тоже самое, только айпи сдвигаете, ну типа у компьютера 192.168.1.10, а плате дайте 192.168.1.20

например. Пинганите для теста без платы, чтобы убедиться что кроме нее нет случайно такого же узла. Потом пингуйте плату.

 

Только учтите что ответ на пинг так же часть стэка, и без стэка пинга не будет.

 

у LwIP есть процедура начальной инициализации, в зависимости от режим с операционкой или без нее.

 

Дальше надо постоянно вызывать функции обработки ТРС сообщений. Которые внутри себя будут вызывать callback функции с принятыми данными и событиями.

 

Насчет буферизации, для ТСР определен пакет от 56 до 1500 скольких то байт. Но никто не говорит что данные должны идти единым пакетом, более того есть оборудования (например wifi) который любит дробить и менять порядок пакетам, не всегда, но есть экземпляры. ТСР берет на себя сбор и выстраивание пакетов в нужном порядке. Более того у него есть так называемое окно, которое при заполнении не дает посылать данные дальше пока старые не будут приняты и обработаны, так что через ТСР можно послать бесконечной длинны поток данных.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда на первом этапе создам новое сетевое подключение по вышеописанной методике. Пропингую адрес, предназначенный для платы. Перепрошью плату с новыми настройками и проверю железо на примере от терры. Если будет пинговаться, пойдем дальше. Нужна будет помощь в создании своего проекта на основе имеющегося железа + драйвера от ST + LwIP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только собрался создать новое соединение. Вдруг выясняется, что у меня новый айпи. Есть идеи кроме как новую карточку воткнуть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Этот только в 5 появился. Хотя это только визард создания проэкта. Внутри проэкта всеравно появятся другие визады по настройке RTOS, Ethernet, ETH-PHY, протоколов и т.д.

 

поставил 5 посмотрел и примеры и то что делает визард...

что то можно использовать, но очень многое остается за кадром как понимаю в проприетарной закрытой части .либ

например алгоримы пререинициализации phy & mac...

 

может быть есть где то примеры хорошей работы с ethernet?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все что вам может понадобится - открыто. На сайте keil выложено куча примеров и ответов на разные вопросы. К тому же вам предлагают вариант с lwip.

Вот здесь все что вам может понадобится.

 

extern LOCALM nlocalm[]; // Local Machine Settings

extern LOCALM localm[]; // for DHCP redy

extern u8 lhost_name[]; // Name

extern u8 own_hw_adr[]; // MAC

 

Переинициализация PHY не требуется. Все срабатывает "на лету". Ну если хочется то: init_TcpNet(); в любой момент.

Все структуры описаны в Net_lib.c, который пристегнут к визорту Net_Config.c в самом конце.

Что касается "хорошей работы" - не понятно, что вы имеете ввиду. Создается впечетление, что, как тут кто то сказал -"Ваша беда в том, что вы хотите, что бы кто то за вас все сделал".

С езернетом такое не прокатит. Удачи.

 

Изменено пользователем vlad_new

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

хм... возможно я чего то не нашел, но то что мне нужно я не видел, к примеру, как обрабатывается ситуация пропадания появления линка? зависания phy? зависания мак контроллера? так же не увидел как вообще происходит инициализация езернета - есть только функции в драйверах но вот откуда они вызываюстя? откуда то из закрытых недр ос? то что переинициализация в кейле не требуется и она осуществляется на лету это здорово, но я делаю в жсс и на сам кейл перепозлать не собираюсь теперь уже точно ибо это кот в мешке по большому счету, что и как там происходит тайна за семью печатями

 

разные стеки мне не нужны, обработку пакетов делаю сам, интересует именно инициализация и поддержка в работоспособном состоянии именно это я назвал "примером хорошей работы"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу подсказать как мне настроить вторую сетевую карту, которая будет использоваться для работы с девайсом? При этом первая (на борту) уже используется под интернет. В частности что писать в строчку "шлюз"? Хотелось бы чтоб компьютер имел адрес 192.168.0.1, а девайс пусть будет 192.168.0.2 . Спасибо.

 

Поторопился с вопросом. Нашел тут для чайников: http://2bubna.com.ua/index.php/nastroyka-s...-kompyuter.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Железо проверил, все работает. Наконец-то можно приступить к вопросам непосредственно касающимся названия темы. У меня заведен проект в кейле, состоящий из драйвера от СТ, инициализации пинов и тактирования. Прикрепляю его к посту (может кто найдет время глянуть на что оно похоже). Собственно вопрос в том, можно ли как-то убедится в работоспособности уже имющейся программной части? Как мне теперь добавить LwIP чтоб пинговаться начало? Спасибо. Буду рад любой помощи и подсказкам.

 

ETH107.ZIP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

самый первый тест это попихать данные в МАК контроллер, и поглядеть wireSharkom лезут ли они в сеть. Я не умничая фигачил Hello world, и видел шарком плохой ошибочный пакет с моими данными.

 

в обратную сторону я что-то в свое время быстрого и простого теста не придумал, надо на уровень драйвера винды спускаться... Но я подумал в одну сторону работает и в другую будет.

 

LwIP - хорошо бы примеры поглядеть. Стэк от кейла как то легче прикручивается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пытался скачать стек от кейла но так и не увидел где ссылка. А что надежней, от кейла или lwip? А попытаться передавать это значит писать в буфер и как-то командовать отправку? С буфером понятно, но как пнуть на отправку? Я так понял, что буфер имеет несколько страниц, в частности 8 на прием, а 2 на передачу? В смысле в реализации от терры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

готовые стеки не использовал, начинал с приема арп пакета потом училс его отправлять, делал на основе примера от терры.. или пром? короче там где кусок от обработки камеры

 

однако если делаете в кейле то там как то все очень по своему

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пытался скачать стек от кейла но так и не увидел где ссылка. А что надежней, от кейла или lwip? А попытаться передавать это значит писать в буфер и как-то командовать отправку? С буфером понятно, но как пнуть на отправку? Я так понял, что буфер имеет несколько страниц, в частности 8 на прием, а 2 на передачу? В смысле в реализации от терры.

 

Да фиг его знает что надежнее

В LwIP есть исходники, если что можно переписать

Стэк от кейла - закрытый, библиотека и досвидос, если что не так, только им писать

 

С другой стороны кеил уважаемая фирма, и как в их среде можно выбрать из списка процессор и сразу его характеристики ставятся, так и стэк как то очень легко сам цепляется.

 

 

как пнуть начало передачи в СТМ что-то не знаю...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А стек кейловский где скачать и где пишут про "прикрутить" библиотеку? Очень уж интригует что легко сам цепляется. Я думаю попробовать и то и то. Жизнь покажет. Только благоразумней начинать с того, что попроще дабы снизить вероятность ошибок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не надо ничего качать. Библиотека уже у вас лежит вот где то там ..\ARM\RV31\LIB\TCP_CM3.lib

В визарте Net_Config.c ставите галочки какие надо. К пректу надо подключить драйвер ETH соответствующий вашему модему.

В мэйне запускаете инициализацию портов. Затем запускается init_TcpNet(); далее в цыкле мэин вызавается timer_poll(); и main_TcpNet(); и все.

Все остальное делается при помощи callback функций, которые запускаются из библиотеки кейла. Все нужные callback функции сначала должны быть объявлены и проинициализированы. К примеру callback для приема и передачи пакетов по UDP выглядит так:

    udp_soc=udp_get_socket(0,UDP_OPT_SEND_CS|UDP_OPT_CHK_CS,udp_callback);  // UDP socket
    if(udp_soc!= 0) udp_open(udp_soc, 1000);                                                             // Open UDP port 1000 for communication

Вот так ( к примеру ) выглядит прием команды по UDP и отправка разных параметров в ответ:

u16 udp_callback1 (u8 socket, u8 *remip, u16 remport, u8 *buf, u16 len) 
{
u8 *send;
char tbf[4];
u32 dp;

    if((!memcmp(buf,"GET",3))||(!memcmp(buf,"Get",3))||(!memcmp(buf,"get",3))) 
      {
      if(DHCP_off) strcpy(tbf,"OFF"); else strcpy(tbf,"ON");
      dp=*(u32*)&localm[0];
      send = udp_get_buf(256);                                 // Len 256 !!!
      len=sprintf((char*)send,
      "\nMAC[%02X:%02X:%02X:%02X:%02X:%02X]"
      "\nIP[%d.%d.%d.%d]" 
      "\nMASK[%d.%d.%d.%d]" 
      "\nGW[%d.%d.%d.%d]"
      "\nDNS[%d.%d.%d.%d]"
      "\nDHCP_%s" 
      "\nIP_DHCP[%d.%d.%d.%d]" 
      "\nNAME[%s]\n",
      own_hw_adr[0], own_hw_adr[1], own_hw_adr[2], own_hw_adr[3], own_hw_adr[4], own_hw_adr[5],
      nlocalm[0].IpAdr[0],   nlocalm[0].IpAdr[1],   nlocalm[0].IpAdr[2],   nlocalm[0].IpAdr[3],
      nlocalm[0].NetMask[0], nlocalm[0].NetMask[1], nlocalm[0].NetMask[2], nlocalm[0].NetMask[3],
      nlocalm[0].DefGW[0],   nlocalm[0].DefGW[1],   nlocalm[0].DefGW[2],   nlocalm[0].DefGW[3],
      nlocalm[0].PriDNS[0],  nlocalm[0].PriDNS[1],  nlocalm[0].PriDNS[2],  nlocalm[0].PriDNS[3],
      tbf, dp&0xFF, (dp>>8)&0xFF, (dp>>16)&0xFF, (dp>>24)&0xFF, (char*)lhost_name);
      udp_send (udp_soc1, remip, 1000, send, len);
      }
  return (0);
}

 

В lwip точно так же все делается через callback функции.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавил библиотеку и файл Net_Config.c; подключил Net_Config.h

Пишет вот такую ошибку: F:\PROGRAM\Keil454\ARM\RL\TCPnet\Config\Net_Config.c(859): error: #20: identifier "ERR_MEM_LOCK" is undefined

 

Что можно сделать? Спасибо.

 

С этим разобрался. Добавил в:

typedef enum {                    /* << Fatal System Error Codes >>          */
  ERR_MEM_ALLOC,
  ERR_MEM_FREE,
  ERR_MEM_CORRUPT,
  ERR_MEM_LOCK,           //вот сюда
  ERR_UDP_ALLOC,
  ERR_TCP_ALLOC,
  ERR_TCP_STATE
} ERROR_CODE;

 

Теперь другие ошибки:

 

eth107.axf: Error: L6218E: Undefined symbol init_ethernet (referred from at_ethernet.o).

eth107.axf: Error: L6218E: Undefined symbol send_frame (referred from at_ethernet.o).

 

С этим сложнее. Может кто подскажет как поступить?

 

Net_lib.c нужно включать в проект?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...