중국산 칩의 데이터시트가 중국어다

중국산 칩의 데이터시트가 중국어다

중국어 데이터시트와의 전쟁

시작은 가격이었다

회의실. 구매팀 과장이 엑셀을 띄웠다.

“STM32는 개당 8달러. 중국 칩은 2달러.”

양산 수량 10만 개. 계산기 두드릴 필요도 없다. 6억 차이.

“기능은 비슷합니까?”

하드웨어 팀장이 물었다.

“거의 동일합니다. Cortex-M4 코어에 플래시 256KB…”

나는 듣고 있었다. 불안했다.

“데이터시트 봤어요?”

내가 물었다.

“있습니다. PDF로.”

“한글 버전요?”

“중국어인데, 번역하면 되죠.”

회의는 그렇게 끝났다. 결정됐다.

중국 칩. 이름도 처음 듣는 회사.

퇴근길에 검색했다. 자료가 없었다. 영문 리뷰도 없었다.

다음 날 샘플이 도착했다. 데이터시트 PDF도 함께.

820페이지. 전부 중국어.

번역기는 거짓말을 한다

구글 번역에 넣었다. 1분 걸렸다.

결과물을 열었다.

“GPIO configuration method: please configure pin function enable switch after power on sequence completes successfully.”

무슨 소리지.

원문을 다시 봤다. 한자가 빽빽했다.

파파고도 돌렸다. 비슷했다.

“핀 기능 활성화 스위치를 전원 순서 완료 후 설정하십시오.”

핀 기능? 활성화 스위치? 전원 순서?

레지스터 맵을 봤다.

地址名称说明
0x4000 0000GPIO_CFG配置寄存器

번역기: “Configuration register”

그래. 그건 알겠어.

비트 필드를 봤다.

名称说明
[7:0]PIN_FUNC引脚功能选择

번역기: “Pin function selection”

도움이 안 됐다. 어떻게 선택하는데?

값은? 0x00이 뭐고 0x01이 뭔데?

표를 찾았다. 40페이지 뒤에 있었다.

功能
0x00通用输入输出
0x01复用功能1
0x02复用功能2

번역기: “General input output”, “Multiplexing function 1”, “Multiplexing function 2”

복용 기능이 뭔데.

다시 검색했다. “alternate function”이었다.

하나하나 이랬다. 820페이지를.

예제 코드는 없다

보통 데이터시트 뒤에는 예제가 있다.

STM32는 HAL 라이브러리에 수백 개 예제가 있다.

중국 칩은? SDK 다운로드 링크가 있었다.

중국 사이트. 회원가입 필요. 휴대폰 인증은 중국 번호만.

막혔다.

하드웨어 팀한테 물었다.

“칩 회사 연락처 있어요?”

“있긴 한데, 이메일 답장이 늦어요.”

메일 보냈다. 영어로.

“Could you provide SDK download link?”

3일 뒤 답장 왔다. 중국어.

번역기 돌렸다.

“请访问我们的官方网站下载。”

공식 사이트 방문하래. 거기가 안 되는데.

다시 메일 보냈다. “Cannot access from Korea.”

5일 뒤 답장. 중국어.

“请使用VPN。”

VPN 쓰래.

회사에서 VPN? 보안팀 허락받아야 한다.

보안팀: “업무용인가요?”

“네.”

“중국 사이트요?”

“칩 제조사 공식 사이트입니다.”

“검토 후 회신 드리겠습니다.”

2주 걸렸다. 승인 안 났다.

결국 집에서 내 노트북으로 받았다. 규정 위반인지 모르겠다.

SDK 압축 풀었다. README.txt 열었다.

중국어.

예제 폴더 열었다. 주석이 전부 중국어.

// 初始化GPIO
void gpio_init(void) {
    // 使能时钟
    RCC->APB2ENR |= (1 << 3);
    
    // 配置为推挽输出
    GPIOB->CRL &= ~(0x0F << 0);
    GPIOB->CRL |= (0x03 << 0);
}

“使能时钟”. 번역기: “Enable clock”. 이건 알겠다.

“推挽输出”. 번역기: “Push pull output”. 이것도 알겠다.

하지만 레지스터 값이 맞는지는 모른다.

데이터시트랑 대조해야 한다. 중국어 데이터시트랑.

커뮤니티는 더 없다

STM32 쓸 때는 몰랐다.

구글에 검색하면 답이 나온다는 걸.

스택오버플로우에 물어보면 30분 안에 답글 달린다는 걸.

중국 칩은? 검색해도 안 나온다.

영문 포럼 없다. 깃허브 이슈도 없다.

중국 포럼은 있다. CSDN이라는 사이트.

전부 중국어다.

회원가입했다. 질문 올렸다. 영어로.

“How to configure UART interrupt priority?”

답글 없었다. 일주일 지나도.

중국어로 번역해서 다시 올렸다.

“如何配置UART中断优先级?”

구글 번역 돌린 문장이라 자연스럽지 않았을 거다.

답글 하나 달렸다. 중국어.

“请参考手册第245页。”

번역: “Please refer to page 245 of the manual.”

245페이지 봤다. 이미 봤던 페이지. 도움 안 됐다.

다시 답글 달았다. “Still not clear.”

답 없었다.

유튜브 찾아봤다. 튜토리얼 영상 있을까.

없었다. 중국 사이트 Bilibili에는 있었다.

중국어 음성. 자막 없음.

영상 보면서 따라했다. 레지스터 값 적었다.

주석 없이 코드만 따라 치는 느낌.

왜 이 값인지 모른다. 그냥 작동하니까.

실전은 더 지옥이다

타이머 인터럽트 설정하는데 3일 걸렸다.

데이터시트에는 이렇게 써 있었다.

“定时器中断使能位于NVIC_ISER寄存器。”

번역: “Timer interrupt enable is located in NVIC_ISER register.”

NVIC_ISER는 ARM 표준이다. 이건 안다.

근데 인터럽트 번호가 뭔지 안 나와 있다.

표를 찾았다. 60페이지 뒤에.

中断源中断号
TIM125
TIM226

TIM1이 25번. 코드 짰다.

NVIC->ISER[0] |= (1 << 25);

안 됐다. 인터럽트 안 들어온다.

하루 디버깅했다. 오실로스코프로 핀 확인. 파형 나온다.

인터럽트만 안 된다.

데이터시트 다시 봤다. 200페이지 더 읽었다.

작은 주석 발견.

“注意:使用前需配置中断向量表偏移。”

번역: “Note: Need to configure interrupt vector table offset before use.”

뭐? 벡터 테이블 오프셋?

STM32는 자동인데.

코드 추가했다.

SCB->VTOR = 0x08000000;

됐다. 인터럽트 들어왔다.

3일 걸린 이유: 데이터시트 한 줄. 200페이지 뒤에 숨어 있음.

중국어로.

하드웨어 버그인가 펌웨어 버그인가

ADC 값이 이상했다.

3.3V 인가했는데 읽히는 값이 2.8V.

하드웨어팀: “회로는 문제없어요.”

나: “그럼 캘리브레이션 문제?”

데이터시트 찾아봤다. ADC 챕터. 80페이지.

캘리브레이션 절차 있었다. 중국어.

번역기 돌렸다.

“校准步骤:

  1. 设置校准位
  2. 等待校准完成
  3. 读取校准值”

“Calibration steps:

  1. Set calibration bit
  2. Wait for calibration to complete
  3. Read calibration value”

괜찮네. 따라했다.

ADC->CR2 |= ADC_CR2_CAL;
while(ADC->CR2 & ADC_CR2_CAL);
uint16_t cal_val = ADC->DR;

안 됐다. 여전히 2.8V.

에러타 찾았다. Errata sheet. 칩 버그 리스트.

중국어. 당연히.

번역 돌렸다. 30개 버그 중 하나 발견.

“ADC校准值需乘以系数1.18。”

“ADC calibration value needs to be multiplied by factor 1.18.”

뭐? 곱하기 1.18?

왜? 이유 안 나와 있다.

일단 했다.

float voltage = adc_value * 3.3 / 4096 * 1.18;

됐다. 3.3V 나왔다.

이유는 모른다. 지금도.

양산이 다가온다

개발 3개월 걸렸다.

STM32였으면 한 달.

디버깅 시간의 70%는 데이터시트 읽는 시간.

중국어 해석하고, 번역 의심하고, 예제 찾고, 안 되고.

팀장: “일정 괜찮아?”

나: “빡셉니다.”

팀장: “다음엔 검증된 칩 쓰자.”

나: “네.”

다음에도 안 그럴 거다. 가격 때문에.

이제 양산 준비.

펌웨어 동작은 확인됐다. 근데 불안하다.

내가 놓친 중국어 주석이 있을까.

200페이지 뒤에 숨어있는 “注意” 또 있을까.

그냥 운에 맡긴다.

밤새 데이터시트 다시 읽는다.

중국어. 820페이지.

번역기는 여전히 거짓말한다.

“请确保正确配置。”

번역: “Please ensure correct configuration.”

뭘 어떻게 확인하라는 건데.

모른다.

내일 또 읽는다.


6억 아끼려다 3개월 날렸다. 그래도 양산은 나간다.