VCucumber 0 5 января, 2013 Опубликовано 5 января, 2013 · Жалоба Так оно и сейчас уже очень даже вкусно. Только почему-то все производители просто считают своим долгом засунуть эзернет в стоногий корпус, куда блин с такой плюшкой. БГА был бы поменьше, конечно, но это вообще космос. Может кто-нибудь объяснить, почему эстээмовский SPI клинит, если только отправлять данные и не вычитывать принятые данные каждый раз после отправки ? Подумал. Если второй SPI включить слейвом параллельно, то можно будет через один SPI передавать, через другой принимать. Возможно, поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 5 января, 2013 Опубликовано 5 января, 2013 · Жалоба Проверил SPI - работает адекватно. Проблема, похоже в w5200 - м.б. не успевает принимать (или отправлять) данные и хочет паузу между ними. Будете смеяться, вот такая шняга работает. void SPI1_SendByte(uint8_t byte) { // while (!(SPI1->SR & SPI_I2S_FLAG_TXE)); SPI1->DR = byte; while (!(SPI1->SR & SPI_I2S_FLAG_RXNE)); // Delay_us(1); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); // (uint8_t)SPI1->DR; } Если при отправке ждать готовности передатчика, а не приемника - не работает. Если нопов четырнадцать, а не пятнадцать - не работает. Скорость передачи поднялась стабильно до 38К+ Шаманство и магия какие-то, а не программирование. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 5 января, 2013 Опубликовано 5 января, 2013 (изменено) · Жалоба Выше наврал, с w5200 все ок - проверял пошагово в отладчике, а там конечно задержки. Очевидно, баг в STM. Примерно вот такой код для проверки, MISO подключен к MOSI uint8_t i; for(i = 11; i < 14; i++) { while (!(SPI1->SR & SPI_I2S_FLAG_TXE)); SPI1->DR = i; Delay_us(1); } while ((SPI1->SR & SPI_I2S_FLAG_RXNE)) i = SPI1->DR; while (!(SPI1->SR & SPI_I2S_FLAG_TXE)); SPI1->DR = (uint8_t)123; while (!(SPI1->SR & SPI_I2S_FLAG_RXNE)); if (SPI1->DR != (uint8_t)123) STM_EVAL_LEDOn(LED5); Задержка после отправки зависит не от времени, а должна быть пропорциональна тактовой частоте-1 SPI, иначе зажигается LED5 (считывается ноль) STM32F407 VGT6 A HPAEX VG KOR HP 123 Поскольку стала понятна причина, добавил ядру частоты до 216MHz и 7 тактов ожидания - теперь летит 48K+ пакетов. Почти сколько нужно. Изменено 5 января, 2013 пользователем Огурцов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 6 января, 2013 Опубликовано 6 января, 2013 (изменено) · Жалоба Дрыганьем ножек вручную (без SPI) удалось достичь 19.6К, незнание ассемблера ARM не позволяет оптимизировать код дальше На 72MHz тактовой, с 2 тактами ожидания, PCLK2==Div1 10 нопов с SPI - 23,2К зы: 100 пиновый LQFP на первый взгляд не входит. Кто-нить паяет БГА вручную, есть проблемы ? Изменено 6 января, 2013 пользователем Огурцов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 7 января, 2013 Опубликовано 7 января, 2013 · Жалоба LM3S со встроенным PHY Вся линейка ушла в NRND :crying: http://e2e.ti.com/search/default.aspx#q=Lm...0&pi24906=1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 7 января, 2013 Опубликовано 7 января, 2013 · Жалоба Таки запустил код в RAMе, скорость почему-то? стала меньше, чем из флеша, и самое необъяснимое, FLASH_SetLatency, почему-то, влияет на выполнение, на 168MHz требует три дополнительных цикла ожидания иначе виснет. Получается, что скорость RAM тоже ограничена, на 3+1 такта, вместо 7+1 для флеша. Если я прав, то получается, что STM32F4 - чисто маркетинговая разводка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться