|
самый быстрый сетевой чип ? |
|
|
|
Jan 2 2013, 20:05
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Я бы взял stm32f407, но корпус великоват, да и PHY все равно снаружи ставить. Более менее эквивалент w5200 - ENC424J600, но после enc28j60 как-то я опасаюсь. По w5200 Интересно, что при снижении тактовой частоты процессора скорость передачи падает практически один в один. А при отправке пакета через восемь сокетов сразу в некоторые моменты скорость передачи достигает максимальной. Подключение напрямую, без коммутатора.
CODE int16_t _UDPSend(uint8_t s, const uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t port) { uint8_t status=0; uint16_t ret=0;
if (((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) || ((port == 0x00))) return 0; status = getSn_SR(s); if(status == SOCK_CLOSED) return ERROR_CLOSED; if((IINCHIP_READ(Sn_MR(s))&0x0F) != Sn_MR_UDP) return ERROR_NOT_UDP_SOCKET; if(status != SOCK_UDP) return ERROR_NOT_UDP_SOCKET;
//----------------------- /* wait to process the command... */ while(IINCHIP_READ(Sn_CR(s)));
while (sending[s] && ((IINCHIP_READ(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK)) { if (IINCHIP_READ(Sn_IR(s)) & Sn_IR_TIMEOUT) { /* clear interrupt */ IINCHIP_WRITE(Sn_IR(s), (Sn_IR_SEND_OK | Sn_IR_TIMEOUT)); /* clear SEND_OK & TIMEOUT */ sending[s] = 0; return ERROR_TIME_OUT; } }
IINCHIP_WRITE(Sn_IR(s), Sn_IR_SEND_OK); sending[s] = 0; ClearSubnet(); // for errata
//------------------
if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size. else ret = len;
IINCHIP_WRITE(Sn_DIPR0(s),addr[0]); IINCHIP_WRITE((Sn_DIPR0(s) + 1),addr[1]); IINCHIP_WRITE((Sn_DIPR0(s) + 2),addr[2]); IINCHIP_WRITE((Sn_DIPR0(s) + 3),addr[3]); IINCHIP_WRITE(Sn_DPORT0(s),(uint8_t)((port & 0xff00) >> 8)); IINCHIP_WRITE((Sn_DPORT0(s) + 1),(uint8_t)(port & 0x00ff)); // copy data send_data_processing(s, (uint8_t *)buf, ret);
SetSubnet(Subnet); // for errata IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND); sending[s] = 1;
return ret; }
|
|
|
|
|
Jan 4 2013, 05:00
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Не хотелось бы на новых камнях год-другой потерять.
Килопакетов в секунду
F100
2,25
F303
6,13 видимо, за счет наличия буфера SPI
F407
3,67 168мгц - ST обещала, что будет без тактов ожидания, а получилось медленнее, чем на F303 ( 5,19 -O3 5,81 передача/прием в одной процедуре 7,50 оптимизация цикла ожидания готовности передатчика 8,66 оптимизация цикла ожидания готовности приемника 8,66 оптимизация условия у циклов 10,62 оптимизация передачи 17,96 оптимизация приема 12,59 inline 12,65 снова без inline 12,90 оптимизация параметров у SPI1_SendByte 11,81 -Os 12,38 -O1 12,17 -O2
|
|
|
|
|
Jan 4 2013, 07:35
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
QUOTE Не хотелось бы на новых камнях год-другой потерять. Это каким таким образом? Ну а остальное не выдерживает никакой критики - на LPC1768 (всего 100МГц, кстати) достигается без особого гемороя полная утилизация полосы 100М, причем с использованием TCP и при загрузке проца 40 процентов.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jan 4 2013, 10:48
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(Rst7 @ Jan 4 2013, 08:35)  Это каким таким образом? Ну вот такой вот я тормоз. Плюс сюда нужно будет залить денег за среду, программатор, отладочную плату. Проще уж на самом деле к F407 PHY прикрутить. Цитата(Rst7 @ Jan 4 2013, 08:35)  LPC1768 LPC17 Ride7 кстати может. Но stm32f мне пока нравится. Просьба: если уж предлагаете вместо сетевого контроллера взять совершенно другой процык, то учитывайте, что я существенно ограничен размерами платы, расчитываю на пару 48ми-ногих или один 64-ногий. LQFP/0.5мм. w5200 в этом смысле - большое зло. В общем, мысли пока такие 1. Как-то заставить выполняться код или функцию передачи из ОЗУ 2. Прикрутить DMA 3. ...все пока
|
|
|
|
|
Jan 5 2013, 00:28
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Может кто-нибудь объяснить, почему эстээмовский SPI клинит, если только отправлять данные и не вычитывать принятые данные каждый раз после отправки ? Типо фича такая или все же руки ? Хочется убрать третью и четвертую строчки кода: Код void SPI1_SendByte(uint8_t aData) { while (!(SPI1->SR & SPI_I2S_FLAG_TXE)); SPI1->DR = aData; while (!(SPI1->SR & SPI_I2S_FLAG_RXNE)); (uint8_t)SPI1->DR; } Вместе работает, если оставить только первую и вторую, то при приеме считываются одни нули. Прием: Код uint8_t SPI1_ReciveByte() { while ((SPI1->SR & SPI_I2S_FLAG_RXNE)) SPI1->DR;
while (!(SPI1->SR & SPI_I2S_FLAG_TXE)); SPI1->DR = (uint8_t)0; while (!(SPI1->SR & SPI_I2S_FLAG_RXNE)); return SPI1->DR; }
|
|
|
|
|
Jan 5 2013, 10:10
|
Местный
  
Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182

|
Цитата(Огурцов @ Jan 5 2013, 06:32)  Был не прав, оказывается ride7 его может, а это среда, прошивка и отладка. Так что вопрос лишь за демобордой. Судя по видео http://www.youtube.com/watch?feature=playe...;v=tVTh7E5kSpE#! у них в ближайших планах выпустить LM4F29x серию со встроенным MAC+PHY. Должно быть весьма вкусно.
--------------------
typedef enum { no, yes, maybe } bool; | блог тут
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|