Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 06.04.2017, 10:44  
Дмитрий1987
Временная регистрация
 
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Дмитрий1987 на пути к лучшему
По умолчанию Ethernet в STM32F407

Всем привет! Хочу вот освоить Ethernet в STM32F407, используя CMSIS.

Сначала хочу убедиться в том, что фреймы от ПК записываются в RX FIFO STM32F407.

Собрал рабочее место:
ПК-езернет кабель-рабочая плата, на которой установлен трансформатор, LAN8720, STM32F407, светодиод

Написал следующую прогу:

Нажмите, чтобы открыть спойлер
/*******/
#include "stm32f4xx.h"

// pa1-refclk, pa2-mdio,pa7-crs;
// pb11-txen, pb12-tx0, pb13-tx1,pb14-rxer;
// pc1-mdc,pc4-rx0, pc5-rx1,
// pe12-rst
// pd8-hl3_r

/******/
uint8_t temp,temp1;
uint32_t i, j,temp2,temp3;

//main program
int main()
{
//set PLL 64MHz
RCC-›PLLCFGR=0x24000000;
RCC-›PLLCFGR|= RCC_PLLCFGR_PLLSRC_HSI;//hsi-pll sourc
RCC-›PLLCFGR|=RCC_PLLCFGR_PLLM_4;//M=16
RCC-›PLLCFGR|=RCC_PLLCFGR_PLLN_7;//N=128
RCC-›PLLCFGR&=~RCC_PLLCFGR_PLLP;//P=2

RCC-›CR|=RCC_CR_PLLON;//enab pll
while (!(RCC-›CR&RCC_CR_PLLRDY));

RCC-›CFGR=RCC_CFGR_PPRE2_2|RCC_CFGR_PPRE1_2;
RCC-›CFGR|=RCC_CFGR_SW_PLL;//sys clock-pll

FLASH-›ACR|=FLASH_ACR_LATENCY_4WS;
for (i=0;i‹500;i++);

//set rcc
RCC-›AHB1ENR|=RCC_AHB1ENR_GPIOAEN|RCC_AHB1ENR_GPIOBEN| R CC_AHB1ENR_GPIOCEN|RCC_AHB1ENR_GPIODEN|RCC_AHB1ENR _GPIOEEN;
RCC-›AHB1ENR|=RCC_AHB1ENR_ETHMACRXEN|RCC_AHB1ENR_ETHMA C TXEN|RCC_AHB1ENR_ETHMACEN;
RCC-›APB2ENR|=RCC_APB2ENR_SYSCFGEN;
SYSCFG-›PMC=SYSCFG_PMC_MII_RMII_SEL;

//set gpio
GPIOA-›MODER|=GPIO_MODER_MODER7_1|GPIO_MODER_MODER2_1|GP I O_MODER_MODER1_1;
GPIOB-›MODER|=GPIO_MODER_MODER13_1|GPIO_MODER_MODER12_1| G PIO_MODER_MODER11_1;
GPIOC-›MODER|=GPIO_MODER_MODER5_1|GPIO_MODER_MODER4_1|GP I O_MODER_MODER1_1;
GPIOD-›MODER|=GPIO_MODER_MODER8_0;//pin 8-0utput
GPIOE-›MODER|=GPIO_MODER_MODER12_0;//pin 12-0utput

GPIOA-›OSPEEDR|=GPIO_OSPEEDER_OSPEEDR7|GPIO_OSPEEDER_OSP E EDR2|GPIO_OSPEEDER_OSPEEDR1;
GPIOB-›OSPEEDR|=GPIO_OSPEEDER_OSPEEDR14|GPIO_OSPEEDER_OS P EEDR13|GPIO_OSPEEDER_OSPEEDR12|GPIO_OSPEEDER_OSPEE DR11;
GPIOC-›OSPEEDR|=GPIO_OSPEEDER_OSPEEDR5|GPIO_OSPEEDER_OSP E EDR4|GPIO_OSPEEDER_OSPEEDR1;

GPIOA-›AFR[0]|=0xB0000BB0;//mac
GPIOB-›AFR[1]|=0x00BBB000;//mac
GPIOC-›AFR[0]|=0x00BB00B0;//mac

//config LAN8720

GPIOE-›ODR=GPIO_ODR_ODR_12;//rst=1
while (ETH-›MACMIIAR&0x00000001);//busy=1

ETH-›MACMIIDR=0x00001000;//auto-negotiation
ETH-›MACMIIAR=0x00000803;//adr=1, reg=0,write
while (ETH-›MACMIIAR&0x00000001);


for (i=0;i‹50000;i++)
{
ETH-›MACMIIAR=0x00000fc1;//adr=1, reg=31,read
while (ETH-›MACMIIAR&0x00000001);
while (!(ETH-›MACMIIDR&0x00001000))//auto-neg done?
{//no
GPIOD-›ODR&=~GPIO_ODR_ODR_8;
ETH-›MACMIIAR=0x00000fc1;//adr=1, reg=31,read
while (ETH-›MACMIIAR&0x00000001);
}
GPIOD-›ODR|=GPIO_ODR_ODR_8;

}
for (i=0;i‹50000;i++);
GPIOD-›ODR&=~GPIO_ODR_ODR_8;
for (i=0;i‹5000000;i++);

//config MAC


ETH-›MACCR=0x00008000;//

switch(ETH-›MACMIIDR)
{
case 0x00001044:ETH-›MACCR|=0x00008000;//10,h
break;
case 0x00001054:ETH-›MACCR|=0x00008800;//10,f
break;
case 0x00001048:ETH-›MACCR|=0x0000c000;//100,h
break;
case 0x00001058:ETH-›MACCR|=0x0000c800;//100,f
GPIOD-›ODR|=GPIO_ODR_ODR_8;
for (i=0;i‹500000;i++);
GPIOD-›ODR&=~GPIO_ODR_ODR_8;
for (i=0;i‹5000000;i++);
break;
default: GPIOD-›ODR|=GPIO_ODR_ODR_8;
while (1);
break;
}
ETH-›MACCR|=ETH_MACCR_RE;//enable receive
ETH-›MACFFR=ETH_MACFFR_RA;//all frames receive


while (!(ETH-›MACDBGR&0x0000ffff))
{
GPIOD-›ODR|=GPIO_ODR_ODR_8;
}
while(1)
{
GPIOD-›ODR|=GPIO_ODR_ODR_8;
for (i=0;i‹500000;i++);
GPIOD-›ODR&=~GPIO_ODR_ODR_8;
for (i=0;i‹500000;i++);
}
}


Как я понял, если фреймы записываются в RX FIFO STM32f407, то в регистре MACDBGR хотя бы один бит в диапазоне номеров от 15 до 0 должен быть равен 1, тогда светодиод, подключенный к выводу PD8, должен мигать. А он светится постоянно, получается фреймы не записываются в RX FIFO STM32f407!

Подскажите, пожалуйста, что я делаю не так? Спасибо!
Реклама:
Дмитрий1987 вне форума  
Непрочитано 06.04.2017, 11:24  
dgrishin
Почётный гражданин KAZUS.RU
 
Регистрация: 12.02.2013
Сообщений: 1,015
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Ethernet в STM32F407

А что за МАК адреса вы настроили ?? Пока у вас нет IP стека на контроллере, он сможет принимать только броадкастовые и малтикастовые езернет фреймы (точнее компьютер будет только такие на него отправлять)
dgrishin вне форума  
Непрочитано 06.04.2017, 11:34  
Дмитрий1987
Временная регистрация
 
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Дмитрий1987 на пути к лучшему
По умолчанию Re: Ethernet в STM32F407

Я никакие МАС адреса на микроконтроллере не настраивал! Я хочу просто увидеть что какие-то фреймы записываются в приемный ФИФО. я в регистре MACFFR установил бит receive all (RA=1)
Дмитрий1987 вне форума  
Непрочитано 06.04.2017, 11:40  
dgrishin
Почётный гражданин KAZUS.RU
 
Регистрация: 12.02.2013
Сообщений: 1,015
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Ethernet в STM32F407

Когда команда ping вам в помощь (комп. будет отправлять arp запрос). Или включите какой нить служебный протокол в настройка компьютера - они работают по L2.
dgrishin вне форума  
Непрочитано 06.04.2017, 11:53  
Дмитрий1987
Временная регистрация
 
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Дмитрий1987 на пути к лучшему
По умолчанию Re: Ethernet в STM32F407

Хм! На самом деле в итоге я хочу сделать езернет удлинитель, то есть получить следующую конфигурацию:

ПК- езернет кабель-плата с трансформатором, LAN8720, STM32F407-кабель-плата с трансформатором, LAN8720, STM32F407-езернет кабель-ПК

Платы соединяются по SPI
Дмитрий1987 вне форума  
Непрочитано 06.04.2017, 11:56  
Дмитрий1987
Временная регистрация
 
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Дмитрий1987 на пути к лучшему
По умолчанию Re: Ethernet в STM32F407

Я не могу понять, почему ни один бит с номерами от 15 до 0 в регистре MACDBGR не выставляется в 1!!!!
Дмитрий1987 вне форума  
Непрочитано 06.04.2017, 12:08  
dgrishin
Почётный гражданин KAZUS.RU
 
Регистрация: 12.02.2013
Сообщений: 1,015
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Ethernet в STM32F407

ETH_MACDBGR
An all-zero status indicates that the MAC core is in Idle state (and
FIFOs are empty) and no activity is going on in the data paths.

Конечно если конфигурация правильная.

сделайте ping 1.1.1.1 с консоли и посмотрите что изменится
dgrishin вне форума  
Непрочитано 06.04.2017, 12:30  
Дмитрий1987
Временная регистрация
 
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Дмитрий1987 на пути к лучшему
По умолчанию Re: Ethernet в STM32F407

Попробовал, без изменений
Может быть я не все регистры сконфигурировал?

Ни одного примера не нашел в интернете с применением CMSIS для написания проги с езернетом для микроконтроллеров STM32(((
Дмитрий1987 вне форума  
Непрочитано 06.04.2017, 12:39  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Ethernet в STM32F407

Для начала (лучше до начала) стоит хорошо покурить документацию (RTFM!!!!) по нижним уровням - PHY/MAC/…, разобраться с работой Ethernet, разобраться с режимами и логикой работы используемого железа,…
На стороне ПК желательно поставить что-то для контроля обмена по сети (WareShark например) и научиться пользоваться. Желательно иметь генератор пакетов нужного формата и содержимого. Тут и поиск и написание своего на C/VB/python/… поможет, примеры и описания есть, остальное не сильно сложно.

И в догонку - чип простейшего hub с обвязкой для просто удлинителя, даже с питанием и транзитом питания по PoE не проще собрать или купить? И задачу решит и проблемой будет только изготовление платы по рекомендациям из DS?

PS после изучения основ и при наличии генератора нужных пакетов можно уже отлаживаться. Кстати ещё неплохо бы смотреть на сигналы на ногах отдельным инструментом осциллограф, ЛА,…
Сейчас пока будет очень много вопросов для телепатов - потребуется воспроизведение Вашей конфигурации и ее проверка.

PPS может стоит вообще искать примеры построения Ethernet стека?
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 06.04.2017 в 12:47.
mike-y-k вне форума  
Непрочитано 06.04.2017, 12:58  
Дмитрий1987
Временная регистрация
 
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Дмитрий1987 на пути к лучшему
По умолчанию Re: Ethernet в STM32F407

Осциллограф есть, сигналы на приемных выводах микроконтроллера (RXD0, RXD1) смотрел, сигналы нормальные. плата рабочая, другой человек для неё писал прогу с езернетом, прога работает!

Wireshark есть, работать с ним умею, пакеты с ПК выходят!

PLL в микроконтроллере настроена правильно на 64 МГц, смотрел по осциллографу.
LAN8720 настроен, показывает, что скорость езернета 100 Мбит/с, режим полнодуплексный

RM0090 в части езернета изучил главы 33.1-33.4 и в главе 33.5 изучил формат фрейма и описание приема. Думаю пока достаточно читать!

Если кто-то уже писал прогу с езернетом и разбирался с регистрами, я думаю не составит труда, просмотрев код, сказать что не так!

Спасибо!
Дмитрий1987 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускорить компьютер 7Fantomas7 Ремонт оргтехники 111 08.08.2018 05:27
Ethernet на STM32F407 eddy ARM 16 03.09.2014 18:04
Разъем ethernet RJ45 with magnetics izhivi Информация по радиокомпонентам 0 28.06.2013 18:48
Ethernet + контроллер innovator_king Микроконтроллеры, АЦП, память и т.д 5 30.06.2010 18:31


Часовой пояс GMT +4, время: 05:10.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot