efr327 EFR32BG21 BLE SPP 개발 (3부 인터럽트, BLE) 또 한동안 다른 프로젝트를 하다 보니, 포스팅하는 것을 잊어버렸다. EFR32 GPIO 인터럽트는 조금 특이하다. 보통 EXT 인터럽트 1,2 번 해서 핀별로 인터럽트 핸들러를 지정하거나 하는데, 이번 칩은 핀번호 짝수, 홀수핀으로 인터럽트 핸들러는 지정한다. ?? AN0012: General Purpose Input Output (silabs.com) 내가 했던 프로젝트 제품은 인터럽트를 2개를 받는데, 둘 다 짝수 번이었다. 그래서 EVEN 인터럽트 핸들러로만 동작한다. (PC02, PC04...). 다행히 2개의 핀 이 동시다발적으로 실행되지 않아 문제가 되지 않았지만, 다른 시스템에서는 이점을 조심히 봐야 할 것이다. BLE를 이용하는 제품들 중 Nordic의 NUS 기능이 많이 사용되고 있다. .. 2023. 7. 3. EFR32BG21 BLE SPP 개발 (2부, GPIO, UART 등) 펌웨어로 무언가를 개발하려면 제일 먼저 하는 건, LED 켜고 끄기다. 사실 더 이전에 하는 일은 전원이 정상 들어오는지? 뻥 터지지 않는지? 오실레이터가 정상적으로 발진하는지, JTAG과 CPU가 정상적으로 통신하는지... 등이 있다. 그래서 가장 마지막에 테스트하는 GPIO로 LED가 제어가 된다면 개발 관련해서는 50% 이상은 한 것이나 마찬가지이다. (개발 관련은..) - GPIO - 출력 설정을 하려면 GPIO_PinModeSet 함수를 이용하면 된다. 포트와 PIN 번호를 가지고 풀업을 하지 말지 그리고 초기 출력값을 무엇으로 할지 결정하면 된다. 또 CMU_ClockEnable 함수로 GPIO 클럭 활성화도 같이 해주면 된다. 위는 PORTD의 4번 핀에 있는 LED를 풀업으로 초기값 '.. 2023. 7. 3. EFR32BG21 BLE SPP 개발 (1부, 프로젝트 구성) 프로젝트를 매번 정리해야지 하다가 벌써 작년 프로젝트가 되어 버렸다. 정리를 안 하니 재작년 프로젝트도 기억이 안 나서 도저히 안되겠다는 생각을.. 이번 프로젝트는 실리콘랩사의 EFR32BG21 시리즈 칩으로 개발한 건이다. BLE 통신을 이용하는 제품인데 개발자들의 편의를 위해서는 SPP(RFCom)을 에뮬레이션(?) 해주지 않으면 안 된다. 특히 Nordic이 해당 기능으로 시장을 거의 선점해 버려서 후발주자는 어쩔 수 없이 개발을.. 기본 예제는 silicon에서 운영하는 github의 예제를 이용했다. 다만 펌웨어 레벨로 기기 2대를 클라이언트와 서버를 구축한 거라 다른 기기(예:스마트폰) 과의 연동시에는 많은 수정사항이 있었다. https://github.com/SiliconLabs/bl.. 2023. 3. 15. EFR32FG1 HFXO 오실레이터 관련된 개발 이야기 실리콘랩스의 EFR32FG1 시리즈를 개발하고 양산하는 도중, 꽤 많은 생산 불량이 나오기 시작했다. 한 7% 정도... ? 무한 재부팅이 되고, 와치 독을 빼면 어디선가 멈춰서 JTAG도 안되고, 멀쩡한 건 정상 부팅이 되고... 문제를 분석하기 위해 크리스털 발진을 찍어보니 발진을 하는 순간, 리셋이 되었다. 어디인지 보기 위해 디버깅 메시지를 이리저리 추가하니, RAIL_StartRx 함수가 실행되면 다음 리셋이 실행되는 것을 확인했다. (https://docs.silabs.com/rail/latest/group-receive) 무선 RF 통신을 하는 장비가 통신을 하니 멈춘다니.. 우선 크리스털이 문제인가 해서 교체해 봤으나 문제는 해결되지 않았다. 냉납인가 해서 납땜도 다시 해봤으나,.. 2022. 10. 14. Silicon Labs EFR32 BLE SPP 안드로이드 송수신 앱 개발 오랜만에 EFR32로 개발할 일이 생겼다. 그때는 무선 RF 통신만 했었는데, 이번엔 BLE SPP 통신을 기반으로 하는 개발 건 이었다. CPU 파트는 조금 다르지만 해봤던 제품이었고 BLE도 Apollo 칩으로 해 본 적이 있으니 어렵지 않을꺼라 했는데, 조금 헷갈렸던 부분이 있어서 정리할 겸 글을 쓴다. 1. 특성별 UUID 는 다 달라야 한가? BLE로 송수신을 하려면 UUID가 필요하다. 서비스 UUID와 characteristic UUID가 있으면 서비스 등록 및 통신이 가능한다. 보통 Write, Notification 2가지로 송수신을 하는데, 보통 다들 다들 다른 UUID를 사용한다. Nordic도 그랬고 Apollo도 그랬다. 당연히 EFR32도 그렇겠지 했는데... 요 2가.. 2022. 3. 13. J-Link 의 시리얼 넘버 가져오기 단순 개발할 때는 몰라도 되는 기능이지만 양산 등으로 인하여 J-Link 별 다운로드를 각각 해야 하는 경우 우선 J-Link의 시리얼 넘버를 알아야 한다. 우선 PC에서 "adapter_packs\inspect_emdll"를 찾는다. 그리고 그 폴더에서 inspect_emdll.exe를 찾은 다음 cmd 창에서 다음과 같이 실행한다. 그러면 J-Link의 시리얼 넘버를 가져올 수 있다. 2021. 4. 15. 이전 1 2 다음