/* * VesiScan BASIC - Custom board overlay * 프로젝트에서 사용하는 하드웨어 핀 정의 * * Pin mapping: * POWER_HOLD: P0.08 (output, active high - latches power) * POWER_BTN: P1.08 (input, active low - pressed = LOW) * LED_BLE: P0.12 (output, active low) * LED_ORANGE: P0.29 (output, active low) * BATT_ADC: P0.04 (AIN2, battery voltage measurement) * IMU_SCL: P1.14 (I2C0 clock) * IMU_SDA: P1.15 (I2C0 data) */ /* ADC 채널 공통 매크로 (ADC_GAIN_*, ADC_REF_*, ADC_ACQ_TIME 등) */ #include /* nRF SAADC 전용 매크로 (NRF_SAADC_AIN* 채널 번호 정의) */ #include /* nRF 핀 컨트롤 매크로 (NRF_PSEL - I2C/SPI 등 핀 재배치에 필요) */ #include /* P0.08이 DK 기본 UART0 RX로 잡혀있어서 GPIO 출력 충돌 → 비활성화 */ &uart0 { status = "disabled"; }; /* 실제 보드에 DK용 외부 QSPI flash가 없어서 부팅 시 probe 실패를 막음 */ &qspi { status = "disabled"; }; /* DK 보드 정의에 포함된 MX25R64 외부 flash도 함께 비활성화 */ &mx25r64 { status = "disabled"; }; /* I2C0 핀 재설정: ICM42670P IMU (SCL=P1.14, SDA=P1.15) */ &i2c0_default { group1 { psels = , ; }; }; &i2c0_sleep { group1 { psels = , ; low-power-enable; }; }; &i2c0 { status = "okay"; clock-frequency = ; }; /* 배터리 ADC 채널 설정 (AIN2 = P0.04) */ &adc { status = "okay"; #address-cells = <1>; #size-cells = <0>; /* 배터리 전압 측정 채널 * 1/6 gain + 0.6V 내부 레퍼런스 → 풀스케일 3.6V * 12bit 해상도, 4X 오버샘플링, 40us 샘플링 */ channel@2 { reg = <2>; zephyr,gain = "ADC_GAIN_1_6"; zephyr,reference = "ADC_REF_INTERNAL"; zephyr,acquisition-time = ; zephyr,input-positive = ; zephyr,resolution = <12>; zephyr,oversampling = <2>; /* 2^2 = 4X */ }; }; /* P0.04(AIN2)가 DK Arduino 헤더에 GPIO로 잡혀있어서 SAADC 충돌 → 비활성화 */ &arduino_adc { status = "disabled"; }; / { /* ADC 채널을 코드에서 참조하기 위한 zephyr,user 노드 */ zephyr,user { io-channels = <&adc 2>; io-channel-names = "battery"; }; led { compatible = "gpio-leds"; LED_BLE: LED_BLE { gpios = <&gpio0 12 GPIO_ACTIVE_LOW>; label = "Green LED"; }; FUNCTION_LED: FUNCTION_LED { gpios = <&gpio0 29 GPIO_ACTIVE_LOW>; label = "Orange LED"; }; }; pin { compatible = "gpio-keys"; PWR_HOLD: PWR_HOLD { gpios = <&gpio0 8 GPIO_ACTIVE_HIGH>; label = "Power Hold Latch"; }; BUTTON_CHECK: BUTTON_CHECK { gpios = <&gpio1 8 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; label = "Power Button"; }; /* 피에조 TX/RX 전원 레일 제어 * HIGH = 전원 ON, LOW = 전원 OFF */ PIEZO_PWR: PIEZO_PWR { gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; label = "Piezo Power Enable"; }; PIEZO_PE: PIEZO_PE { gpios = <&gpio0 25 GPIO_ACTIVE_HIGH>; label = "Piezo Pulse Enable"; }; PIEZO_P_OUT: PIEZO_P_OUT { gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>; label = "Piezo P Out"; }; PIEZO_N_OUT: PIEZO_N_OUT { gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>; label = "Piezo N Out"; }; PIEZO_DMP: PIEZO_DMP { gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>; label = "Piezo Dump"; }; MUX_EN_A: MUX_EN_A { gpios = <&gpio0 21 GPIO_ACTIVE_HIGH>; label = "Mux Enable A"; }; MUX_EN_B: MUX_EN_B { gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>; label = "Mux Enable B"; }; MUX_SEL0: MUX_SEL0 { gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; label = "Mux Select 0"; }; MUX_SEL1: MUX_SEL1 { gpios = <&gpio0 28 GPIO_ACTIVE_HIGH>; label = "Mux Select 1"; }; ECHO_SCLK: ECHO_SCLK { gpios = <&gpio0 14 0>; label = "Echo ADC SCLK"; }; ECHO_MISO: ECHO_MISO { gpios = <&gpio0 15 0>; label = "Echo ADC MISO"; }; ECHO_CS: ECHO_CS { gpios = <&gpio0 19 GPIO_ACTIVE_LOW>; label = "Echo ADC CS"; }; }; };