From 3025925c071e020a2008af1b6cdfb827ff8a5cc8 Mon Sep 17 00:00:00 2001 From: woody Date: Fri, 23 Jan 2026 11:32:57 +0900 Subject: [PATCH] update PMIC_Tool code --- .../PMIC_Cmd_Tool/PMIC_Cmd_Tool.vcxproj | 14 +++- .../PMIC_Cmd_Tool/src/PMIC_Cmd_Tool.cpp | 75 +++++++++++++++---- 2 files changed, 70 insertions(+), 19 deletions(-) diff --git a/Src/0_Tool/PMIC_Tool/PMIC_Cmd_Tool/PMIC_Cmd_Tool.vcxproj b/Src/0_Tool/PMIC_Tool/PMIC_Cmd_Tool/PMIC_Cmd_Tool.vcxproj index c730c8b1..b196d96a 100644 --- a/Src/0_Tool/PMIC_Tool/PMIC_Cmd_Tool/PMIC_Cmd_Tool.vcxproj +++ b/Src/0_Tool/PMIC_Tool/PMIC_Cmd_Tool/PMIC_Cmd_Tool.vcxproj @@ -127,12 +127,20 @@ - copy /y "$(ProjectDir)external\FT4222\dll\*.dll" "$(OutDir)" + :: 1. DLL 파일 먼저 복사 +copy /y "$(ProjectDir)external\FT4222\dll\*.dll" "$(OutDir)" +@echo off +:: 2. PowerShell을 이용해 시스템 언어와 무관하게 날짜_시간 추출 (YYYYMMDD_HHmm) +for /f "tokens=*" %%i in ('powershell -NoProfile -Command "Get-Date -Format 'yyyyMMdd_HHmm'"') do set BUILD_NAME=%%i +:: 3. 경로 설정 (반드시 큰따옴표로 감싸야 함) +set "TARGET_PATH=$(SolutionDir)PMIC_Cmd_Tool_Build_History\%BUILD_NAME%" - - +:: 4. 폴더 생성 및 복사 +echo Creating backup at: "%TARGET_PATH%" +if not exist "%TARGET_PATH%" mkdir "%TARGET_PATH%" +xcopy /y /e "$(OutDir)*.*" "%TARGET_PATH%\" diff --git a/Src/0_Tool/PMIC_Tool/PMIC_Cmd_Tool/src/PMIC_Cmd_Tool.cpp b/Src/0_Tool/PMIC_Tool/PMIC_Cmd_Tool/src/PMIC_Cmd_Tool.cpp index 401fb03e..5f9c2823 100644 --- a/Src/0_Tool/PMIC_Tool/PMIC_Cmd_Tool/src/PMIC_Cmd_Tool.cpp +++ b/Src/0_Tool/PMIC_Tool/PMIC_Cmd_Tool/src/PMIC_Cmd_Tool.cpp @@ -27,6 +27,7 @@ uint8_t calcCRC8(uint8_t addrWithRw, uint8_t* data, int len); int parseCommand(const char* dir); void PMIC_I2C_Write(FT_HANDLE ftHandle, uint8_t slaveAddr, uint8_t regAddr, uint8_t value); void PMIC_I2C_Read(FT_HANDLE ftHandle, uint8_t slaveAddr, uint8_t regAddr); +void toBinaryString(uint8_t val, char* outBuf); int main() { @@ -114,14 +115,16 @@ int main() (void)getchar(); //Regulation Register + printf("Regulation Register\n"); // Page00 //PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGU, 0x00, 0x00); //PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGU, 0x00, 0x00); + // IO_CHIPVERSION_REGU & IO_DIEID3_REGU //PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x00); //0x000 - IO_PAGE_REGU //PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x01); //0x001 - IO_CHIPNAME_REGU - //PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x02); //0x002 - IO_CHIPVERSION_REGU - //PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x03); //0x003 - IO_DIEID3_REGU + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x02); //0x002 - IO_CHIPVERSION_REGU + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x03); //0x003 - IO_DIEID3_REGU //PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x04); //0x004 //PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x05); //0x005 @@ -129,8 +132,25 @@ int main() //PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGU, 0x00, 0x02); //PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x23); - // 30ms 딜레이 - //Sleep(30); + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x30); //0x030 - FLT_MASK_OTP(OTP) + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x31); //0x031 - FLT_MASK_TEMP(OTP) + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x32); //0x032 - FLT_MASK_BUCK1(OTP) + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x33); //0x033 - FLT_MASK_BUCK2(OTP) + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x34); //0x034 - FLT_MASK_BUCK3(OTP) + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x35); //0x035 - FLT_MASK_BUCK4(OTP) + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x36); //0x036 - FLT_MASK_BUCK5(OTP) + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x37); //0x037 - FLT_MASK_LDO(OTP) + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x38); //0x038 - FLT_MASK_IF(OTP) + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x40); //0x040 - FLT_RECORD_OTP + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x41); //0x041 - FLT_RECORD_TEMP + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x42); //0x042 - FLT_RECORD_BUCK1 + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x43); //0x043 - FLT_RECORD_BUCK2 + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x44); //0x044 - FLT_RECORD_BUCK3 + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x45); //0x045 - FLT_RECORD_BUCK4 + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x46); //0x046 - FLT_RECORD_BUCK5 + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x47); //0x047 - FLT_RECORD_LDO + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x48); //0x048 - FLT_RECORD_IF + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x49); //0x049 - FLT_RECORD_LDO_DISC_DET // Page02 //PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGU, 0x00, 0x02); @@ -142,10 +162,13 @@ int main() //PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x24); //PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x25); - // 30ms 딜레이 - //Sleep(30); + // IO_CHIPVERSION_REGU & IO_DIEID3_REGU + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x02); //0x002 - IO_CHIPVERSION_REGU + PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGU, 0x03); //0x003 - IO_DIEID3_REGU /* Protection Register */ + printf("Protection Register\n"); + // Read IO_CHIPNAME & IO_DIEID3 PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x02); //0x002 - IO_CHIPNAME PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x03); //0x003 - IO_DIEID3 @@ -154,16 +177,20 @@ int main() //PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x11); //0x011 - FUSA_STATUS_2 //PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x12); //0x012 - FUSA_STATUS_2A //PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x13); //0x013 - FUSA_STATUS_3 - //PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x14); //0x014 - FUSA_STATUS_4 + PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x14); //0x014 - FUSA_STATUS_4 PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x19); //0x019 - FLT_RECORD_A PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x1A); //0x01A - FLT_RECORD_B - //PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x1B); //0x01B - FLT_RECORD_GND_AVIN - //PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x1C); //0x01C - FLT_RECORD_BG_Temp - //PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x1D); //0x01D - FLT_RECORD_IntLDOs - //PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x1E); //0x01E - FLT_RECORD_ExtLDOs - //PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x1F); //0x01F - FLT_RECORD_BUCKS_B - //PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x20); //0x01E - FLT_RECORD_BUCKS_A - //PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x21); //0x01F - FLT_RECORD_ExtINPs_7_0 + PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x1B); //0x01B - FLT_RECORD_GND_AVIN + PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x1C); //0x01C - FLT_RECORD_BG_Temp + PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x1D); //0x01D - FLT_RECORD_IntLDOs + PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x1E); //0x01E - FLT_RECORD_ExtLDOs + PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x1F); //0x01F - FLT_RECORD_BUCKS_B + PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x20); //0x01E - FLT_RECORD_BUCKS_A + PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x21); //0x01F - FLT_RECORD_ExtINPs_7_0 + + // Read IO_CHIPNAME & IO_DIEID3 + PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x02); //0x002 - IO_CHIPNAME + PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROT, 0x03); //0x003 - IO_DIEID3 // PMIC Debug Mode @@ -612,7 +639,23 @@ void PMIC_I2C_Read(FT_HANDLE ftHandle, uint8_t slaveAddr, uint8_t regAddr) return; } else { - printf("Read 결과: [Address = 0x%02X], [Value = 0x%02X], [CRC = 0x%02X]\n", - regAddr, rx[0], rx[1]); + // [개선] 2진수 변환 로직 적용 + char binStr[10]; // "0000_0000" + null + toBinaryString(rx[0], binStr); + + //printf("Read 결과: [Addr: 0x%02X] [Hex: 0x%02X] [Bin: %s] [CRC: 0x%02X]\n", regAddr, rx[0], binStr, rx[1]); + printf(" [Addr: 0x%02X] [Value Hex: 0x%02X -> Bin: %s] [CRC: 0x%02X]\n", regAddr, rx[0], binStr, rx[1]); } + +} + +// 8비트 데이터를 "0000_0000" 형식의 문자열로 변환 +void toBinaryString(uint8_t val, char* outBuf) +{ + for (int i = 0; i < 8; i++) { + // 상위 비트부터 검사하여 '1' 또는 '0' 채우기 + outBuf[i + (i >= 4 ? 1 : 0)] = (val & (1 << (7 - i))) ? '1' : '0'; + } + outBuf[4] = '_'; // 가독성을 위한 언더바 삽입 + outBuf[9] = '\0'; // 문자열 끝 지정 } \ No newline at end of file