쉘 스크립트를 실행을 했는데, “bad interpreter: /bin/bash^M: no such file or directory”이런 메시지가 나오면 dos2unix를 실행한다.
$ brew install dos2unix
$dos2unix ./build_all.sh
$./build_all.sh
쉘 스크립트를 실행을 했는데, “bad interpreter: /bin/bash^M: no such file or directory”이런 메시지가 나오면 dos2unix를 실행한다.
$ brew install dos2unix
$dos2unix ./build_all.sh
$./build_all.sh
노르딕에서 제공하는 예제코드의 경우 SDK 설정이 sdk_config.h에서 이루어 진다. 문제는 이 파일의 사이즈가 크고 #ifdef 등으로 설정이 되어 있어서 파일 자체를 보기가 불편하다. 그래서 이 설정을 쉽게 하는 툴이 제공이 되는데, 기본 SES 설정에는 없어서 따로 설정을 해야 한다.
다음의 코드를 삽입한다
ESP32 가 빌드는 되는데 flashing이 다음과 같은 에러메시지로 안되는 경우
Traceback (most recent call last):
File “esptool.py”, line 57, in <module>
File “/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py”, line 389, in load_module
File “serial/tools/list_ports.py”, line 29, in <module>
File “/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py”, line 389, in load_module
File “serial/tools/list_ports_posix.py”, line 31, in <module>
File “/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py”, line 389, in load_module
File “serial/tools/list_ports_osx.py”, line 32, in <module>
ValueError: dlsym(RTLD_DEFAULT, kIOMasterPortDefault): symbol not found
Failed to execute script esptool
기존 esptool을 esptool.py로 다음과 같이 변경을 하면 해결이 된다.
copy /Users/XXXXX/Library/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/esptool.py
to /Users/XXXXX/Library/Arduino15/packages/esp32/tools/esptool_py/2.6.1/esptool.pychmod +x esptool.py
그리고 /Users/XXXXX/Library/Arduino15/packages/esp32/hardware/esp32/1.0.4/platform.txt 파일을 열어서 다음과 같이 수정한다.
tools.esptool_py.cmd=esptool -> tools.esptool_py.cmd=esptool.py
platform.txt 파일을 수정하고 Arduino를 재시작
마스터, 슬레이브의 이름에서 주는 주종관계 때문에 그동안 별 의식없이 쓰여왔던 이름들이 바뀌었다.
MOSI – COPI
MISO – CIPO
이 2가지만 기억하면 될 것 같다.
펌웨어 개발을 할때 MCU의 I/O핀을 맵핑해서 사용을 하게 된다. 아두이노의 경우에는 실제 HW 핀 매핑을 MCU 벤더에서 제공하는 것 처럼 low level로 access하지 않고, 보드의 실크에 적혀있는 핀 번호로 access할 수 있도록 추상화를 해 놓았다. 실제로 핀 매핑이 어떻게 되는지 보려면 맥의 경우 $HOME/라이브러리/Arduino15/packages 아래에 각 플랫폼 별로 되어 있는 폴더를 확인해 봐야 한다. 예를 들면 adafruit의 경우 /packages/adafruit/hardware/nrf52/0.21.0/variants/feather_nrf52840_express/variant.h파일과 variant.cpp 파일을 확인해 보면 된다.
PlatformIO도 아두이노와 마찬가지로 VSCode에 설치를 하면 맥에서는 $HOME/.platformio/packages 폴더 아래에 각각의 프레임워크에서 사용하는 bootloader, library들이 설치가 되어 있다.
I2C 프로토콜은 필립스반도체(지금의 NXP)에서 만든 프로토콜로 I2C의 약자는 Inter-Integrated-Circuit 이다. SDA, SCL 2 wire 만 필요해서 간단한데, SPI와 마찬가지로 마스터-슬레이브 구조를 가진다. 데이터를 전송하고 ACK가 오면 통신에 이상이 없는 것이지만 NACK의 상황도 있다.
하기 표와 같이 NACK의 상황중 가장 많은 경우가 Slave Address가 틀릴 경우일 것 같은데, 데이터 시트에서 명기한 주소가 7 bit address인지 아지면 8 bit인지 확인이 필요하고, 칩 벤더에서 제공하는 드라이버 코드가 8bit를 받아서처리하는 것인지, 7bit를 받아서 처리하는 루틴인지 확인이 필요하다. 참고 문서