Compare commits
2 Commits
48608c9d1f
...
6d72ede665
| Author | SHA1 | Date | |
|---|---|---|---|
| 6d72ede665 | |||
| b0a11961ac |
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
/*++
|
/*++
|
||||||
|
|
||||||
Copyright (c) 2001-2021 Future Technology Devices International Limited
|
Copyright (c) 2001-2021 Future Technology Devices International Limited
|
||||||
|
|
||||||
|
|||||||
@@ -29,13 +29,16 @@ typedef enum {
|
|||||||
|
|
||||||
// Function Prototypes
|
// Function Prototypes
|
||||||
FT_HANDLE InitializeFT4222();
|
FT_HANDLE InitializeFT4222();
|
||||||
|
|
||||||
void currentPreciseTime(char* buf, size_t len); // 초(00)와 밀리초(000) 포맷으로 저장 (예: 45.123)
|
void currentPreciseTime(char* buf, size_t len); // 초(00)와 밀리초(000) 포맷으로 저장 (예: 45.123)
|
||||||
void currentTime(char* buf, size_t len); // 현재 시간을 "HH:MM:SS" 형식으로 buf에 저장
|
void currentTime(char* buf, size_t len); // 현재 시간을 "HH:MM:SS" 형식으로 buf에 저장
|
||||||
void logPacket(const char* dir, uint8_t* data, int size, int hasCrc); // 로그 출력 (커스텀 포맷)
|
void logPacket(const char* dir, uint8_t* data, int size, int hasCrc); // 로그 출력 (커스텀 포맷)
|
||||||
uint8_t calcCRC8(uint8_t addrWithRw, uint8_t* data, int len); // CRC8 계산 (다항식 0x07, 초기값 0x00)
|
uint8_t calcCRC8(uint8_t addrWithRw, uint8_t* data, int len); // CRC8 계산 (다항식 0x07, 초기값 0x00)
|
||||||
int parseCommand(const char* dir); // 명령어 판별 (I2C_WRITE/w, I2C_READ/r)
|
int parseCommand(const char* dir); // 명령어 판별 (I2C_WRITE/w, I2C_READ/r)
|
||||||
|
|
||||||
void PMIC_I2C_Write(FT_HANDLE ftHandle, uint8_t slaveAddr, uint8_t regAddr, uint8_t value); // Address에 1바이트 Write with CRC, 그리고 Address를 Read해서 Write한 값과 비교
|
void PMIC_I2C_Write(FT_HANDLE ftHandle, uint8_t slaveAddr, uint8_t regAddr, uint8_t value); // Address에 1바이트 Write with CRC, 그리고 Address를 Read해서 Write한 값과 비교
|
||||||
uint8_t PMIC_I2C_Read(FT_HANDLE ftHandle, uint8_t slaveAddr, uint8_t regAddr); // Address에서 1바이트 Read (CRC 계산 없음)
|
uint8_t PMIC_I2C_Read(FT_HANDLE ftHandle, uint8_t slaveAddr, uint8_t regAddr); // Address에서 1바이트 Read (CRC 계산 없음)
|
||||||
|
|
||||||
void toBinaryString(uint8_t val, char* outBuf); // 8비트 데이터를 "0000_0000" 형식의 문자열로 변환
|
void toBinaryString(uint8_t val, char* outBuf); // 8비트 데이터를 "0000_0000" 형식의 문자열로 변환
|
||||||
bool Run_DebugMode_On(FT_HANDLE ftHandle); // Enter Debug Mode On
|
bool Run_DebugMode_On(FT_HANDLE ftHandle); // Enter Debug Mode On
|
||||||
bool Run_DebugMode_Off(FT_HANDLE ftHandle); // Enter Debug Mode Off
|
bool Run_DebugMode_Off(FT_HANDLE ftHandle); // Enter Debug Mode Off
|
||||||
@@ -44,7 +47,6 @@ void Run_ReadChipInfo(FT_HANDLE ftHandle);
|
|||||||
void Irq_Clear(FT_HANDLE ftHandle); // PMIC Irq Clear
|
void Irq_Clear(FT_HANDLE ftHandle); // PMIC Irq Clear
|
||||||
void Set_Reset(FT_HANDLE ftHandle); // PMIC Set Reset
|
void Set_Reset(FT_HANDLE ftHandle); // PMIC Set Reset
|
||||||
void Set_Error(FT_HANDLE ftHandle); // PMIC Set Error
|
void Set_Error(FT_HANDLE ftHandle); // PMIC Set Error
|
||||||
|
|
||||||
void Handle_ManualCommand(FT_HANDLE ftHandle, char* line); // Manual Command
|
void Handle_ManualCommand(FT_HANDLE ftHandle, char* line); // Manual Command
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
@@ -161,334 +163,6 @@ int main()
|
|||||||
|
|
||||||
printf("Program terminated normally.\n");
|
printf("Program terminated normally.\n");
|
||||||
return 0;
|
return 0;
|
||||||
#if 0
|
|
||||||
FT4222_STATUS ft4222Status;
|
|
||||||
//char addrInput[16];
|
|
||||||
unsigned int tempAddr = 0;
|
|
||||||
uint8_t I2C_SLAVE_ADDR = 0;
|
|
||||||
unsigned long log_counter = 0;
|
|
||||||
char timeStr[16]; // 시간을 저장할 버퍼 (HH:MM:SS면 9바이트면 충분)
|
|
||||||
|
|
||||||
currentTime(timeStr, sizeof(timeStr));
|
|
||||||
//printf("현재 시간: %s\n", timeStr);
|
|
||||||
|
|
||||||
// 1. FT4222 장치 연결 및 초기화
|
|
||||||
FT_HANDLE ftHandle = InitializeFT4222();
|
|
||||||
if (!ftHandle) return -1;
|
|
||||||
printf("PMIC I2C Packet Logger with FT4222\n \n");
|
|
||||||
|
|
||||||
|
|
||||||
//printf("=================================================================================\n");
|
|
||||||
/********************************************************************************************
|
|
||||||
I2C Write
|
|
||||||
PMIC_I2C_Write(FT_HANDLE ftHandle, uint8_t slaveAddr, uint8_t regAddr, uint8_t value)
|
|
||||||
PMIC_I2C_Write(ftHandle, PMIC_I2C_SLAVE_ADDR, PMIC_Register_Address, Value);
|
|
||||||
********************************************************************************************/
|
|
||||||
//printf("=================================================================================\n");
|
|
||||||
/********************************************************************************************
|
|
||||||
I2C Read
|
|
||||||
PMIC_I2C_Read(FT_HANDLE ftHandle, uint8_t slaveAddr, uint8_t regAddr)
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_I2C_SLAVE_ADDR, 0xAA);
|
|
||||||
********************************************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//for (int i = 0; i < 10000000; i++) {
|
|
||||||
//while (1) {
|
|
||||||
//}
|
|
||||||
|
|
||||||
//for (int i = 0; i < 10000000; i++) {
|
|
||||||
//while (log_counter < 10 ){
|
|
||||||
|
|
||||||
// 예: 10번 while에 한 번만 실행
|
|
||||||
//if (log_counter % 10 == 0) {
|
|
||||||
// 30ms 딜레이
|
|
||||||
//Sleep(30);
|
|
||||||
|
|
||||||
printf("Press Enter to I2C read...\n");
|
|
||||||
(void)getchar();
|
|
||||||
|
|
||||||
//Regulation Register
|
|
||||||
printf("Regulation Register\n");
|
|
||||||
// Page00
|
|
||||||
//PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x00);
|
|
||||||
//PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x00);
|
|
||||||
|
|
||||||
// IO_CHIPVERSION_REGU & IO_DIEID3_REGU
|
|
||||||
//PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x00); //0x000 - IO_PAGE_REGU
|
|
||||||
//PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x01); //0x001 - IO_CHIPNAME_REGU
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x02); //0x002 - IO_CHIPVERSION_REGU
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x03); //0x003 - IO_DIEID3_REGU
|
|
||||||
//PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x04); //0x004
|
|
||||||
//PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x05); //0x005
|
|
||||||
|
|
||||||
//PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x02);
|
|
||||||
//PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x02);
|
|
||||||
//PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x23);
|
|
||||||
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x30); //0x030 - FLT_MASK_OTP(OTP)
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x31); //0x031 - FLT_MASK_TEMP(OTP)
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x32); //0x032 - FLT_MASK_BUCK1(OTP)
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x33); //0x033 - FLT_MASK_BUCK2(OTP)
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x34); //0x034 - FLT_MASK_BUCK3(OTP)
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x35); //0x035 - FLT_MASK_BUCK4(OTP)
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x36); //0x036 - FLT_MASK_BUCK5(OTP)
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x37); //0x037 - FLT_MASK_LDO(OTP)
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x38); //0x038 - FLT_MASK_IF(OTP)
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x40); //0x040 - FLT_RECORD_OTP
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x41); //0x041 - FLT_RECORD_TEMP
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x42); //0x042 - FLT_RECORD_BUCK1
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x43); //0x043 - FLT_RECORD_BUCK2
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x44); //0x044 - FLT_RECORD_BUCK3
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x45); //0x045 - FLT_RECORD_BUCK4
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x46); //0x046 - FLT_RECORD_BUCK5
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x47); //0x047 - FLT_RECORD_LDO
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x48); //0x048 - FLT_RECORD_IF
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x49); //0x049 - FLT_RECORD_LDO_DISC_DET
|
|
||||||
|
|
||||||
// Page02
|
|
||||||
//PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x02);
|
|
||||||
//PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x02);
|
|
||||||
//PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x20);
|
|
||||||
//PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x21);
|
|
||||||
//PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x22); //0x222 - I_OTP_VERSION
|
|
||||||
//PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x23); //0x223 - I_OTP_INTERNALVERSION
|
|
||||||
//PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x24);
|
|
||||||
//PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x25);
|
|
||||||
|
|
||||||
// IO_CHIPVERSION_REGU & IO_DIEID3_REGU
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x02); //0x002 - IO_CHIPVERSION_REGU
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x03); //0x003 - IO_DIEID3_REGU
|
|
||||||
|
|
||||||
/* Protection Register */
|
|
||||||
printf("Protection Register\n");
|
|
||||||
// Read IO_CHIPNAME & IO_DIEID3
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x02); //0x002 - IO_CHIPNAME
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x03); //0x003 - IO_DIEID3
|
|
||||||
|
|
||||||
// Read FLT Register
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x10); //0x010 - FUSA_STATUS_1
|
|
||||||
//PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x11); //0x011 - FUSA_STATUS_2
|
|
||||||
//PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x12); //0x012 - FUSA_STATUS_2A
|
|
||||||
//PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x13); //0x013 - FUSA_STATUS_3
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x14); //0x014 - FUSA_STATUS_4
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x19); //0x019 - FLT_RECORD_A
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1A); //0x01A - FLT_RECORD_B
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1B); //0x01B - FLT_RECORD_GND_AVIN
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1C); //0x01C - FLT_RECORD_BG_Temp
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1D); //0x01D - FLT_RECORD_IntLDOs
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1E); //0x01E - FLT_RECORD_ExtLDOs
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1F); //0x01F - FLT_RECORD_BUCKS_B
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x20); //0x01E - FLT_RECORD_BUCKS_A
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x21); //0x01F - FLT_RECORD_ExtINPs_7_0
|
|
||||||
|
|
||||||
// Read IO_CHIPNAME & IO_DIEID3
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x02); //0x002 - IO_CHIPNAME
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x03); //0x003 - IO_DIEID3
|
|
||||||
|
|
||||||
|
|
||||||
//}
|
|
||||||
//}
|
|
||||||
//log_counter++;
|
|
||||||
//}
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
//Regulation Register
|
|
||||||
printf("[Page-0]=================================================================================\n");
|
|
||||||
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x00);
|
|
||||||
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x00);
|
|
||||||
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x00); //0x000 - IO_PAGE_REGU
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x01); //0x001 - IO_CHIPNAME_REGU
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x02); //0x002 - IO_CHIPVERSION_REGU
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x03); //0x003 - IO_DIEID3_REGU
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x04); //0x004 - IO_DIEID2_REGU
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x05); //0x005 - IO_DIEID1_REGU
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x06); //0x006 - IO_DIEID0_REGU
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x0A); //0x00A - OTP_VERSION_REGU
|
|
||||||
|
|
||||||
//Fault register data: Protection Register, Address 0x010 ~0x014, 0x019 ~0x021
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x10); //0x010 - FUSA_STATUS_1
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x11); //0x011 - FUSA_STATUS_2
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x12); //0x012 - FUSA_STATUS_2A
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x13); //0x013 - FUSA_STATUS_3
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x14); //0x014 - FUSA_STATUS_4
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x19); //0x019 - FLT_RECORD_A
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1A); //0x01A - FLT_RECORD_B
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1B); //0x01B - FLT_RECORD_GND_AVIN
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1C); //0x01C - FLT_RECORD_BG_Temp
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1D); //0x01D - FLT_RECORD_IntLDOs
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1E); //0x01E - FLT_RECORD_ExtLDOs
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_PROTECTION, 0x1F); //0x01F - FLT_RECORD_BUCKS_B
|
|
||||||
|
|
||||||
|
|
||||||
printf("[Page-1]=================================================================================\n");
|
|
||||||
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x01);
|
|
||||||
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x01);
|
|
||||||
|
|
||||||
|
|
||||||
printf("[Page-2]=================================================================================\n");
|
|
||||||
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x02);
|
|
||||||
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x02);
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x20); //0x020 - FLT_RECORD_BUCKS_A
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x21); //0x021 - FLT_RECORD_ExtINPs_7_0
|
|
||||||
|
|
||||||
|
|
||||||
printf("[PMIC_RAA271005_INIT]====================================================================\n");
|
|
||||||
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x01);
|
|
||||||
PMIC_I2C_Write(ftHandle, PMIC_ADDR_REGULATION, 0x00, 0x01);
|
|
||||||
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x07); //0x107 - WDT_CFG0 (OTP)
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x08); //0x108 - WDT_CFG1 (OTP) //WDT_ULCNT, WDT_LLCNT
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x09); //0x109 - WDT_CFG2 (OTP)
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x16); //0x116 - FUSA_TIMER_1 (OTP)
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x17); //0x117 - FUSA_TIMER_2 (OTP)
|
|
||||||
PMIC_I2C_Read(ftHandle, PMIC_ADDR_REGULATION, 0x2C); //0x12C - FLT_MASK_B (OTP)
|
|
||||||
|
|
||||||
//Protection Register
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
printf("I2C Address\n Regulation Register is 0x54\n Protection Register is 0x55\n \nEnter 7-bit I2C Slave Address (hex): ");
|
|
||||||
if (scanf_s("%15s", addrInput, (unsigned)_countof(addrInput)) != 1) {
|
|
||||||
printf("입력 오류\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (sscanf_s(addrInput, "%x", &tempAddr) != 1) {
|
|
||||||
printf("잘못된 주소 입력\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
I2C_SLAVE_ADDR = (uint8_t)tempAddr;
|
|
||||||
|
|
||||||
printf("슬레이브 주소 설정됨: 0x%02X\n", I2C_SLAVE_ADDR);
|
|
||||||
|
|
||||||
getchar(); // 버퍼 클리어
|
|
||||||
|
|
||||||
printf("사용법: I2C_WRITE <data...> 또는 w <data...>\n");
|
|
||||||
printf(" I2C_READ (항상 2바이트 읽음) 또는 r\n");
|
|
||||||
printf("exit 또틑 e 입력 시 종료\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
char line[256];
|
|
||||||
while (1) {
|
|
||||||
printf("> ");
|
|
||||||
if (!fgets(line, sizeof(line), stdin)) break;
|
|
||||||
|
|
||||||
line[strcspn(line, "\r\n")] = 0; // 개행 제거
|
|
||||||
if (strcmp(line, "exit") == 0) break;
|
|
||||||
if (strcmp(line, "e") == 0) break;
|
|
||||||
if (strlen(line) == 0) continue;
|
|
||||||
|
|
||||||
char* context = NULL;
|
|
||||||
char* token = strtok_s(line, " ", &context);
|
|
||||||
if (!token) continue;
|
|
||||||
|
|
||||||
for (char* p = token; *p; p++) *p = toupper(*p);
|
|
||||||
|
|
||||||
int command = parseCommand(token);
|
|
||||||
|
|
||||||
if (command == 1) { // I2C_WRITE
|
|
||||||
uint8_t bytes[256];
|
|
||||||
int len = 0;
|
|
||||||
|
|
||||||
while ((token = strtok_s(NULL, " ", &context)) != NULL) {
|
|
||||||
unsigned int val;
|
|
||||||
if (sscanf_s(token, "%x", &val) == 1) {
|
|
||||||
bytes[len++] = (uint8_t)val;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
printf("잘못된 HEX 값: %s\n", token);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (len == 0) {
|
|
||||||
printf("전송할 데이터가 없습니다.\n");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t addrWithRw = (I2C_SLAVE_ADDR << 1) | 0x00;
|
|
||||||
uint8_t crc = calcCRC8(addrWithRw, bytes, len);
|
|
||||||
bytes[len++] = crc;
|
|
||||||
|
|
||||||
uint16 transferred = 0;
|
|
||||||
ft4222Status = FT4222_I2CMaster_Write(ftHandle,
|
|
||||||
I2C_SLAVE_ADDR,
|
|
||||||
bytes,
|
|
||||||
(uint16)len,
|
|
||||||
&transferred);
|
|
||||||
|
|
||||||
if (ft4222Status != FT4222_OK) {
|
|
||||||
printf("I2C Write 실패\n");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
logPacket("I2C_WRITE", bytes, len, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (command == 2) { // I2C_READ
|
|
||||||
uint8_t bytes[256];
|
|
||||||
uint16 transferred = 0;
|
|
||||||
FT4222_STATUS st;
|
|
||||||
int len = 0;
|
|
||||||
|
|
||||||
while ((token = strtok_s(NULL, " ", &context)) != NULL) {
|
|
||||||
unsigned int val;
|
|
||||||
if (sscanf_s(token, "%x", &val) == 1) {
|
|
||||||
bytes[len++] = (uint8_t)val;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
printf("잘못된 HEX 값: %s\n", token);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (len == 0) {
|
|
||||||
printf("전송할 데이터가 없습니다.\n");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t addrWithRw = (I2C_SLAVE_ADDR << 1) | 0x00;
|
|
||||||
uint8_t crc = calcCRC8(addrWithRw, bytes, len);
|
|
||||||
bytes[len++] = crc;
|
|
||||||
|
|
||||||
st = FT4222_I2CMaster_Write(ftHandle,
|
|
||||||
I2C_SLAVE_ADDR,
|
|
||||||
bytes,
|
|
||||||
(uint16)len,
|
|
||||||
&transferred);
|
|
||||||
|
|
||||||
if (st != FT4222_OK) {
|
|
||||||
printf("Read용 Address Write 실패\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 🔹 Register Address에서 2바이트 Read (Value + CRC)
|
|
||||||
uint8_t rx[2] = { 0 };
|
|
||||||
st = FT4222_I2CMaster_Read(ftHandle,
|
|
||||||
I2C_SLAVE_ADDR,
|
|
||||||
rx,
|
|
||||||
2,
|
|
||||||
&transferred);
|
|
||||||
|
|
||||||
if (st != FT4222_OK) {
|
|
||||||
printf("I2C Read 실패\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
printf("Read 결과: [Address = 0x%02X], [Value = 0x%02X], [CRC = 0x%02X]\n",
|
|
||||||
bytes[0], rx[0], rx[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
printf("첫 단어는 I2C_WRITE(w) 또는 I2C_READ(r) 여야 합니다.\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FT_Close(ftHandle);
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FT_HANDLE InitializeFT4222() {
|
FT_HANDLE InitializeFT4222() {
|
||||||
|
|||||||
Reference in New Issue
Block a user