Цитата(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