|
SK-STM32F217 и LwIp стек |
|
|
|
Jan 4 2012, 19:06
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Пытаюсь запустить на SK-STM32F217 (http://starterkit.ru/html/index.php?name=shop&op=view&id=62) демо приложение (udp_echo_server) для STM3220G-EVAL http://www.st.com/internet/evalboard/product/250374.jsp. Демка компилится в Keil без проблем и загружается в SK-STM32F217. Но совсем не работает. Очевидно и не будет работать поскольку в платах стоят разные PHY (в SK-STM32F217 - ks8721bl) (в STM3220G-EVAL - DP83848C). Соединение по ногам идентичное. Регистры у них почти одинаковые. Очевидно все дело в том, что "почти". Пробовал ли кто настроить демку (Ethernet) от STM3220G-EVAL под PHY типа ks8721bl? Если у кого есть опыт в Ethernet stm32 подсобите пожалуйста примером UDP сервера (клиента) для stm32F2xx + PHY типа ks8721bl В комплекте с SK-STM32F217 идет демка TCP/IP сервера на uIP стеке. Как заставить демку работать в режиме UDP сервера пока не допираю.
|
|
|
|
|
 |
Ответов
|
Jan 6 2012, 20:30
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(IgorKossak @ Jan 6 2012, 21:30)  Acvarif, научитесь, наконец, оформлять код. Игнорирование моих комментариев Вам не поможет. Ещё одна моя правка Вашего сообщения и Вам обеспечена неделя read-only. Да, помню. Читать мануалы? Не то, чтобы сильно лень, всегда на это не хватает времени. Да и не всегда там есть, что нужно. По поводу кода все понял. Ниже инициализация GPIO для Ethernet sk-stm32f217 под новую библиотеку. CODE RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOG, ENABLE);
/* ETHERNET pins configuration */ /* | | TYPE | num | GPIO port | 1. TD0 | out | 128 | PG13 | 2. TD1 | out | 129 | PG14 | 3. TEN | out | 70 | PB11 | 4. MC_REFC | out | 100 | PA8 | 5. CRS | in | 43 | PA7 | 6. RD0 | in | 44 | PC4 | 7. RD1 | in | 45 | PC5 | 8. MDC | out | 27 | PC1 | 9. MDIO |in/out| 36 | PA2 | 10.REFC | in | 35 | PA1 | */
// GPIO_Init(GPIOG,GPIO_Pin_13 + GPIO_AF + GPIO_Speed_100MHz + GPIO_PP + GPIO_AF11); /*1. PG13 -> TD0 */ // GPIO_Init(GPIOG,GPIO_Pin_14 + GPIO_AF + GPIO_Speed_100MHz + GPIO_PP + GPIO_AF11); /*2. PG14 -> TD1 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOG, GPIO_PinSource14, GPIO_AF_ETH);
// GPIO_Init(GPIOB,GPIO_Pin_11 + GPIO_AF + GPIO_Speed_50MHz + GPIO_PP + GPIO_AF11); /*3. PB11 -> TEN */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_ETH);
// GPIO_Init(GPIOA,GPIO_Pin_8 + GPIO_AF + GPIO_Speed_100MHz + GPIO_AF0 + GPIO_PP); /*4. PA8 -> MCO1 50MHz output */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_MCO);
// GPIO_Init(GPIOA,GPIO_Pin_7 + GPIO_AF + GPIO_Speed_100MHz + GPIO_AF11); /*5. PA7 -> CRS */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH);
// GPIO_Init(GPIOC,GPIO_Pin_4 + GPIO_AF + GPIO_Speed_100MHz + GPIO_AF11); /*6. PC4 -> RD0 */ // GPIO_Init(GPIOC,GPIO_Pin_5 + GPIO_AF + GPIO_Speed_100MHz + GPIO_AF11); /*7. PC5 -> RD1 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_ETH);
// GPIO_Init(GPIOC,GPIO_Pin_1 + GPIO_AF + GPIO_Speed_50MHz + GPIO_PP + GPIO_AF11); /*8. PC1 -> MDC */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_ETH);
// GPIO_Init(GPIOA,GPIO_Pin_2 + GPIO_AF + GPIO_Speed_50MHz + GPIO_OD + GPIO_AF11); /*9. PA2 -> MDIO */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_ETH);
// GPIO_Init(GPIOA,GPIO_Pin_1 + GPIO_AF + GPIO_Speed_50MHz + GPIO_AF11); /*10.PA1 -> REFC */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_ETH); А здесь конфигурация RCC и SYSCFG для Ethernet stm32 платки Startekit CODE // Enable SYSCFG clock // RCC->APB2ENR |= (1 << 14); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); #ifdef RMII_MODE // SYSCFG->PMC |= (1<<23); SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII); #else // SYSCFG->PMC &= (~(1 << 23)); SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_MII); #endif // SYSCFG->CMPCR |= (1 << 0); SYSCFG_CompensationCellCmd(ENABLE); /* RCC AHB1 peripheral clock register (RCC_AHB1ENR) Bit 25 ETHMACEN: Ethernet MAC clock enable Bit 26 ETHMACTXEN: Ethernet Transmission clock enable Bit 27 ETHMACRXEN: Ethernet Reception clock enable */ // RCC->AHB2ENR |= (1 << 5); RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_HASH, ENABLE); // RCC->AHB1ENR |= (1 << 25) + (1 << 26) + (1 << 27) + (1 << 12); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx | RCC_AHB1Periph_ETH_MAC_Rx | RCC_AHB1Periph_CRC, ENABLE); Надеюсь теперь MAC запустится
Сообщение отредактировал Acvarif - Jan 7 2012, 20:02
|
|
|
|
|
Jan 9 2012, 06:35
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(Acvarif @ Jan 7 2012, 00:30)  Надеюсь теперь MAC запустится Дрова. MAC не запускается. Застревает на Код /* Wait for software reset */ while (ETH_GetSoftwareResetStatus() == SET); Не пойму, что с ним не так. Инициализацию RCC GPIO повторил один к одному от рабочей демки. В ней все впорядке. Хотя нет. Ошибка в инициализации GPIO. CODE /* GPIOB Periph clock enable */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); /* Configure PB8 PB9 output pushpull mode */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOB, &GPIO_InitStructure);
// RCC->AHB1ENR |= (1<<0) + (1<<1) + (1<<2) + (1<<6); /* Enable GPIOA, GPIOB, GPIOC, GPIOG clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOG, ENABLE);
/* ETHERNET pins configuration */ /* | | TYPE | num | GPIO port | 1. TD0 | out | 128 | PG13 | 2. TD1 | out | 129 | PG14 | 3. TEN | out | 70 | PB11 | 4. MC_REFC | out | 100 | PA8 | 5. CRS | in | 43 | PA7 | 6. RD0 | in | 44 | PC4 | 7. RD1 | in | 45 | PC5 | 8. MDC | out | 27 | PC1 | 9. MDIO |in/out| 36 | PA2 | 10.REFC | in | 35 | PA1 | */
// GPIO_Init(GPIOG,GPIO_Pin_13 + GPIO_AF + GPIO_Speed_100MHz + GPIO_PP + GPIO_AF11); /*1. PG13 -> TD0 */ // GPIO_Init(GPIOG,GPIO_Pin_14 + GPIO_AF + GPIO_Speed_100MHz + GPIO_PP + GPIO_AF11); /*2. PG14 -> TD1 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOG, GPIO_PinSource14, GPIO_AF_ETH);
// GPIO_Init(GPIOB,GPIO_Pin_11 + GPIO_AF + GPIO_Speed_50MHz + GPIO_PP + GPIO_AF11); /*3. PB11 -> TEN */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_ETH);
// GPIO_Init(GPIOA,GPIO_Pin_8 + GPIO_AF + GPIO_Speed_100MHz + GPIO_AF0 + GPIO_PP); /*4. PA8 -> MCO1 50MHz output */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_MCO);
// GPIO_Init(GPIOA,GPIO_Pin_7 + GPIO_AF + GPIO_Speed_100MHz + GPIO_AF11); /*5. PA7 -> CRS */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH);
// GPIO_Init(GPIOC,GPIO_Pin_4 + GPIO_AF + GPIO_Speed_100MHz + GPIO_AF11); /*6. PC4 -> RD0 */ // GPIO_Init(GPIOC,GPIO_Pin_5 + GPIO_AF + GPIO_Speed_100MHz + GPIO_AF11); /*7. PC5 -> RD1 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH);
// GPIO_Init(GPIOC,GPIO_Pin_1 + GPIO_AF + GPIO_Speed_50MHz + GPIO_PP + GPIO_AF11); /*8. PC1 -> MDC */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH);
// GPIO_Init(GPIOA,GPIO_Pin_2 + GPIO_AF + GPIO_Speed_50MHz + GPIO_OD + GPIO_AF11); /*9. PA2 -> MDIO */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH);
// GPIO_Init(GPIOA,GPIO_Pin_1 + GPIO_AF + GPIO_Speed_50MHz + GPIO_AF11); /*10.PA1 -> REFC */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH); MAC запустился. Чего теперь дальше делать? Попробую заполнить нужные регистры MAC DMA тем, что предлагает демка от st - STM32F2x7_ETH_LwIP_V1.1.0 Заполнил, все запустилось. UDP эхо сервер заработал. Проверить можно этим http://www.hw-group.com/products/hercules/index_en.html указав порты 7 и 7 Кому интересно, вот архив http://depositfiles.com/files/n8um50ax4 (большой ~ 10 метров) Теперь появилось несколько вопросов. 1. Как назнячить явный IP этому серверу? (он похоже по DHCP сам себе хозяин) 2. Как сделать так, чтобы он откликался при любом локальном порте?
Сообщение отредактировал Acvarif - Jan 9 2012, 08:35
|
|
|
|
Сообщений в этой теме
Acvarif SK-STM32F217 и LwIp стек Jan 4 2012, 19:06 Rst7 Для начала посмотрите в драйвере PHY функцию поиск... Jan 4 2012, 22:15 Acvarif Цитата(Rst7 @ Jan 5 2012, 02:15) Для нача... Jan 5 2012, 07:23 Rst7 Ищите дальше. Посмотрите, что он при инициализации... Jan 5 2012, 10:06 Acvarif Цитата(Rst7 @ Jan 5 2012, 14:06) Ищите да... Jan 5 2012, 11:14  Acvarif Кое что раскопал. Вот правильная инициализация (на... Jan 5 2012, 13:12 Rst7 QUOTE EthInitStatus = ETH_Init(Ð_InitStruct... Jan 5 2012, 13:24 Acvarif Цитата(Rst7 @ Jan 5 2012, 17:24) Ну а дал... Jan 5 2012, 13:40 Rst7 QUOTE Хотя просто вызов ETH_GetSoftwareResetStatus... Jan 5 2012, 13:50 Acvarif Цитата(Rst7 @ Jan 5 2012, 17:50) Не ту фу... Jan 5 2012, 14:08 Rst7 QUOTE И что тут происходит. Нет нормального сброса... Jan 5 2012, 14:46 Acvarif Цитата(Rst7 @ Jan 5 2012, 18:46) Похоже, ... Jan 5 2012, 15:12 Rst7 QUOTE Я так понимаю из -за этого PHY работать не б... Jan 5 2012, 15:16 Acvarif Цитата(Rst7 @ Jan 5 2012, 19:16) Ну пока ... Jan 6 2012, 13:48
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|