
soundcores의 모든 힘을 발휘하세요! :)
soundcore q 시리즈 헤드폰의 펌웨어를 패치, 수정, 개선하기 위한 오픈소스 툴킷이며, 향후 다른 모델 지원도 계획되어 있습니다.
참고: 이 프로젝트는 하드웨어 리버스 엔지니어링과 임베디드 시스템 세계로 들어가는 저의 개인적인 여정입니다. 10대가 만들었고, 저도 배워가며 진행하고 있습니다. 버그와 실수, 그리고 많은 즐거움이 있을 거라 기대하세요. 모든 기여와 조언을 환영합니다!
이 프로젝트는 두 부분으로 나뉩니다:
또한 DOOMBuds 프로젝트를 기반으로 한 데모 프로젝트인 DOOM 포트도 만들었습니다. 그것도 확인해 보세요! =)
이 프로젝트는 soundcore life q35로 시작되었습니다. 새 모델 테스트를 돕거나 지원을 추가하려면 이슈를 열어 주세요!
다른 모델 지원은 향후 목표입니다!
참고:
bes2300*, bes1502*, bes1600칩셋 기반 기기가 향후 지원 가능성이 가장 높은 후보입니다.
openqore는 이제 막 시작했습니다. 다음에 진행될 대략적인 계획은 다음과 같습니다:
이 가이드는 시스템에 python과 git이 설치되어 있다고 가정합니다.
1. 릴리스에서 zip 아카이브를 다운로드하고 압축을 풉니다
2. 의존성 설치
패처는 오디오 변환을 위해 ffmpeg와 pybluez가 필요합니다:
windows:
pip install git+https://github.com/pybluez/pybluez.git
winget install ffmpeg
macos:
pip install git+https://github.com/pybluez/pybluez.git
brew install ffmpeg
ubuntu/debian:
pip install git+https://github.com/pybluez/pybluez.git
sudo apt install ffmpeg
3. 펌웨어 파일 확보하기
OTA 이미지를 여기에서 다운로드하거나 UART로 플래시를 읽을 수 있습니다:
ota (over-the-air)를 통한 플래시 읽기는 향후 업데이트에서 계획되어 있습니다. (가능하다면요 :D)
4. 축하합니다!
사용 방법 안내는 여기에서 확인할 수 있습니다.
공식 업데이트 서버에서 ota 업데이트 이미지를 다운로드한 경우 "ota boot 없음" 옵션을 선택하세요
참고: ota boot 없이 펌웨어를 패치한 경우, UART 플래싱 전에 패치된 펌웨어의 헤더에 ota boot를 추가해야 합니다. besota 스크립트를 사용한다면 이 작업은 필요하지 않습니다!
이 섹션에는 q35 펌웨어 리버스 엔지니어링에서 얻은 초기 발견 사항 중 일부가 포함되어 있습니다.
헤드폰에는 여러 숨겨진 테스트 모드가 있습니다. 그중 일부는 향후 업데이트나 디버깅에 유용할 수 있습니다.
엔지니어링 모드: 이 모드에 진입하려면 전원 버튼을 누른 상태에서 헤드폰이 켜지기 전에 USB-C로 PC에 연결한 다음, 전원이 켜질 때까지 기다리세요.
rfcomm: 헤드폰에는 두 개의 시리얼 COM 포트가 있습니다. 그중 하나는 쓰기가 가능합니다. 지금까지 이 포트를 통해 트리거할 수 있었던 유일한 기능은 UFR (아래 설명)입니다. 특정 명령이 아니라 다양한 16진수 코드를 무차별 대입하여 트리거된 점을 보면 보안 조치로 보입니다. 흥미롭게도 이는 표준 리셋(전원 + 볼륨+)이 아니라 다른 방식입니다.
테스트 모드: 이 모드는 엔지니어링 모드와 비슷하게 진입하지만, 흰색 LED가 처음 깜박인 직후, 파란불이 켜지기 전에 전원 버튼을 놓아야 합니다. 그러면 헤드폰이 PC에 "디바이스 설명자 요청 실패(device descriptor request failed)" 오류가 있는 기기로 나타납니다. 이 모드에 진입했는지는 평소보다 빠르게 깜박이는 흰색 LED로 확인할 수 있습니다. 그 목적은 펌웨어 플래싱과 관련이 있을 가능성이 높습니다. 또한 이 모드에서는 충전 중에 헤드폰 전원을 켤 수 있습니다!
문서화되지 않은 공장 초기화(UFR): 헤드폰 전원이 켜진 상태에서 전원 버튼을 빠르게 여러 번 누르거나 가상 COM 포트(위 참조)로 무언가를 보내면 숨겨진 공장 초기화가 트리거될 수 있습니다. 그러면 펌웨어가 중단(hang)되고 약 30초 후에 강제로 재부팅됩니다. 이 작업은 이퀄라이저 설정, 블루투스 페어링 및 기타 구성을 포함한 모든 사용자 데이터를 삭제한다는 점에 유의하세요.
펌웨어는 여러 섹션으로 나뉜 모놀리식 바이너리로 보입니다. 각 중요 섹션은 crc32 체크섬으로 보호됩니다. 향후 패처는 부팅 실패를 방지하기 위해 수정 후 이러한 체크섬을 자동으로 다시 계산할 것입니다.
16khz, 모노, SBC 오디오 스트림으로 저장됩니다.48khz, 스테레오로 오디오를 재생하도록 강제할 수 있습니다. 이는 사용자 정의 사운드의 품질을 크게 향상시킵니다.기여는 오픈소스 커뮤니티를 배우고, 영감을 주고, 창조하기에 놀라운 장소로 만드는 힘입니다. 여러분의 모든 기여를 크게 감사드립니다.
이 프로젝트를 더 좋게 만들 제안이 있다면 저장소를 포크하고 풀 리퀘스트를 만들어 주세요. 간단히 "enhancement" 태그로 이슈를 열어도 됩니다. 프로젝트에 별표(star)를 주는 것도 잊지 마세요! 다시 한번 감사합니다!
git checkout -b feature/amazing-feature).git commit -m 'feat: add some amazing feature').git push origin feature/amazing-feature).이 프로젝트가 유용하다고 생각하시고 향후 개발을 지원하고 싶다면 boosty를 통해 저에게 커피나 간식을 선물해 주실 수 있습니다! 모든 기여는 크게 감사드리며, openqore에 더 많은 시간을 할애할 수 있게 도와줍니다.
이 프로젝트는 AI 기반 코딩 어시스턴트(예: claude, chatgpt)를 광범위하게 활용하여 탄생했습니다. 핵심 리버스 엔지니어링, 연구, 아키텍처 결정은 작성자가 수행했지만, AI는 개발 프로세스 가속화, 보일러플레이트 코드 작성, 디버깅에 중요한 역할을 했습니다.
현대적인 도구로 만들어진 현대적인 프로젝트입니다.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 전체 라이선스 전문은 라이선스 파일에서 확인할 수 있습니다.
| 모델 | 칩셋 | 상태 |
|---|
| soundcore life q35 | bes2300p | ✅ 지원됨 |
| soundcore life q30 | bes2300p | ❔ 작동할 것으로 예상되지만 테스트 필요 |
| soundcore life tune pro | bes2300p | ❔ 작동할 것으로 예상되지만 테스트 필요 |
| soundcore life tune | bes2300p | ❔ 작동할 것으로 예상되지만 테스트 필요 |
| soundcore life q20i | bes2300p | ❔ 작동할 것으로 예상되지만 테스트 필요 |
| soundcore space one | bes1502x | ❌ 작업 중 |
bes2300p SoC입니다. 데이터시트는 검색을 통해 찾을 수 있습니다.uart 시리얼 포트가 있으며, 잘못된 플래싱 후 기기를 복구(unbrick)하는 주요 방법입니다. bes2300p 칩 자체에는 두 개의 uart 포트가 있지만, 그중 하나만 PCB에서 쉽게 접근할 수 있는 패드로 노출되어 있습니다.