일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 오피스한달
- 스타버스트
- 실내네비게이션
- 한달무료오피스
- array
- 위치측위
- WslRegisterDistribution
- 오피스구독취소
- 오피스구독
- OFFICE취소
- 라즈베리파이
- 설정했습니다
- 블루투스
- BLE
- respi-config
- 1.44inch
- LCDHAT
- 티스토리서로이웃
- UWB
- 블루투스5
- RESPBERRYPI
- BLETAG
- 카데부리데이어리밀크
- 블로거찾기
- WAVESHARE
- 몰랑몰랑젤리
- OFFICE365취소
- 실내위치
- 어레이안테나
- RTLS
- Today
- Total
제품 개발을 위한 임베디드 프로그래밍
ESP32 Ethernet (ESP-WROOM-32E + LAN8720A) 동작확인 본문
목적 : ESP32 보드로 LAN8720A를 연동하는 작업을 위한 포스팅
ESP32에서 제공하는 Ethernet 예제를 활용하여 Ethernet 이 연결되는지 확인을 위한 작업을 공유하고자 합니다.
개발에서 발생한 여러 이슈들이 많은 시작을 허비하게 하는데 이런 시간들이 많이 아깝습니다.
개발환경
개발환경 : Espressif-IDE
IDF Version : esp-idf-v5.1
Python Version : 3.11
활용 예제
사용예제 : ethernet - basic
하드웨어 구성
펌웨어 프로젝트 생성 및 수정
Espressif-IDE 예제를 선택하여 프로젝트를 생성한다.
1. 프로젝트 생성
2. SDK config가 생성되지 않았기 때문에 일단 빌드한다.
빌드
빌드
빌드 완료
만약 빌드가 되지 않으면 PC환경에 따라 문제가 발생할 수 있음.
메시지 남겨주시면 아는 한도내에서 알려드릴 수 있습니다.
LAN8720A로 설정을 변경이 필요합니다.
sdkconfig를 눌러 설정을 합니다.
외부 클럭을 사용할 것임으로 input RMII clock from external 로 설정합니다.
프로그램 수정
: 외부 클럭을 사용하기 위한 코드 삽입
#define OSC_EN 13
static void OSC_ON(void)
{
/* Set the GPIO level according to the state (LOW or HIGH)*/
gpio_set_level(OSC_EN, 1);
}
static void configure_gpio(void)
{
ESP_LOGI(TAG, "OSC_EN!");
gpio_reset_pin(OSC_EN);
/* Set the GPIO as a push/pull output */
gpio_set_direction(OSC_EN, GPIO_MODE_OUTPUT);
}
....
void app_main(void)
{
configure_gpio();
/*50M 클럭을 Enable 한다*/
OSC_ON();
vTaskDelay(1000 / portTICK_PERIOD_MS);
// Initialize Ethernet driver
uint8_t eth_port_cnt = 0;
esp_eth_handle_t *eth_handles;
ESP_ERROR_CHECK(example_eth_init(ð_handles, ð_port_cnt));
// Initialize TCP/IP network interface aka the esp-netif (should be called only once in application)
ESP_ERROR_CHECK(esp_netif_init());
// Create default event loop that running in background
ESP_ERROR_CHECK(esp_event_loop_create_default());
// Create instance(s) of esp-netif for Ethernet(s)
if (eth_port_cnt == 1) {
// Use ESP_NETIF_DEFAULT_ETH when just one Ethernet interface is used and you don't need to modify
// default esp-netif configuration parameters.
esp_netif_config_t cfg = ESP_NETIF_DEFAULT_ETH();
esp_netif_t *eth_netif = esp_netif_new(&cfg);
// Attach Ethernet driver to TCP/IP stack
ESP_ERROR_CHECK(esp_netif_attach(eth_netif, esp_eth_new_netif_glue(eth_handles[0])));
} else {
// Use ESP_NETIF_INHERENT_DEFAULT_ETH when multiple Ethernet interfaces are used and so you need to modify
// esp-netif configuration parameters for each interface (name, priority, etc.).
esp_netif_inherent_config_t esp_netif_config = ESP_NETIF_INHERENT_DEFAULT_ETH();
esp_netif_config_t cfg_spi = {
.base = &esp_netif_config,
.stack = ESP_NETIF_NETSTACK_DEFAULT_ETH
};
char if_key_str[10];
char if_desc_str[10];
char num_str[3];
for (int i = 0; i < eth_port_cnt; i++) {
itoa(i, num_str, 10);
strcat(strcpy(if_key_str, "ETH_"), num_str);
strcat(strcpy(if_desc_str, "eth"), num_str);
esp_netif_config.if_key = if_key_str;
esp_netif_config.if_desc = if_desc_str;
esp_netif_config.route_prio -= i*5;
esp_netif_t *eth_netif = esp_netif_new(&cfg_spi);
// Attach Ethernet driver to TCP/IP stack
ESP_ERROR_CHECK(esp_netif_attach(eth_netif, esp_eth_new_netif_glue(eth_handles[i])));
}
}
// Register user defined event handers
ESP_ERROR_CHECK(esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, ð_event_handler, NULL));
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, &got_ip_event_handler, NULL));
// Start Ethernet driver state machine
for (int i = 0; i < eth_port_cnt; i++) {
ESP_ERROR_CHECK(esp_eth_start(eth_handles[i]));
}
}
다운로드
전원이 꺼진 상태에서 BOOT버튼을 누른상태로 전원을 켜면 BOOT모드로 진입한다.
그후 다운로드가 가능하다.
다운로딩
동작확인
전원을 모두 뺏다 다시 켜서 리셋 시킨다.
터미널을 통해 아래와 같은 메시지가 나오면 정상이다.
필자는 아래 메시지가 나오질 않아 고민하던 중 클럭을 외부클럭으로 변환 한 뒤 아래 메시지를 확인 하였다.
여러 인터넷 사이트를 통해서는 제대로된 답을 찾지 못했다.
ESP32로 개발은 많이 되고 있지만 개발 공유는 잘 안 되는 듯 하다.
바빠서 정리하고 진행하기 어려운게 현실이지만 말이다.
<참고>
Ouptut RMII clock from internal 은 문제가 많이 발생하는 것으로 알려져 본인은 사용하지 않았습니다.
ESP32 내부클럭을 사용한 설정(간헐적으로 동작안되는 이슈 발생해 사용하지 않는다)
자체 광고 하나 하겠습니다^^
ESP32 / BLE / MCU의 펌웨어 개발 / 회로 개발 및 시제품 제작을 하고 있습니다.
개발 의뢰 관련해서 사이트를 방문하시면 보다 많은 정보를 확인 하실 수 있습니다.
개발 문의 : wshan@control-bit.com
'펌웨어개발' 카테고리의 다른 글
ESP32 (Espressif - IDF 기반) 설치시 발생한 문제 정리 (0) | 2023.08.08 |
---|