For the complete documentation index, see llms.txt. This page is also available as Markdown.

Infineon PSoC™ Edge Troubleshooting

การ Flash ชิป PSoC™ 4000T CAPSENSE™

โฟลเดอร์นี้มีไฟล์ psoc4-csd-button-slider.cyacd2 — เฟิร์มแวร์ CAPSENSE™ (ปุ่ม/สไลเดอร์) สำหรับชิป PSoC™ 4000T บน SOM ของ PSoC™ Edge E84 โปรแกรมผ่าน I2C ด้วย DFU Host Tool (ไม่ใช่ผ่าน SWD)

ไฟล์ .cyacd2 แถมมาในโฟลเดอร์นี้แล้ว — ไม่ต้องไปดาวน์โหลด ไฟล์นี้ไม่ใช่ไฟล์เดี่ยว ๆ ให้โหลด แต่แถมมากับ Infineon code example ชื่อ "PSoC Edge: Bluetooth® LE with CAPSENSE™ Button and Slider" (และ example wifi-web-server) ดึงผ่าน ModusToolbox Project Creator หรือ GitHub code-example ของ Infineon — สำเนาในโฟลเดอร์นี้คือ build ที่ยืนยันแล้วว่าใช้กับบอร์ดได้


ทำไม DFU ถึง "fail แบบสุ่ม"

PSoC™ 4000T กับ PSoC™ Edge E84 ใช้สาย I2C เส้นเดียวกัน (P8_0 / P8_1) KitProg3 ทำหน้าที่ bridge USB→I2C ไปยัง bootloader ของ 4000T บนบัสเส้นนี้

ถ้า แอปของ E84 กำลังรันอยู่ (คือเพิ่ง make program ไป) มันจะขับบัส I2C เส้นเดียวกันตลอดเวลาเพื่ออ่านเซนเซอร์บนบอร์ด สัญญาณนี้จะชนกับการโอนข้อมูล DFU → คำสั่งสั้น ๆ ผ่านได้ แต่ data row พัง แล้วขึ้น error ประมาณนี้:

Operation FAILED.
Operation returned unknown value 16639
Error: write operation failed.
[CRITICAL] Error code: -2
Internal error occured. Please enable logging using --debug to get details.

อาการนี้ ไม่ใช่บอร์ดเสีย สายเสีย หรือไฟล์ผิด แต่เป็น bus contention จากแอป E84 ที่รันอยู่ — แก้โดยทำให้ E84 เงียบก่อน

ลำดับที่ถูกต้อง — ห้ามข้าม / ห้ามสลับ

ขั้น
ทำอะไร
จุดประสงค์

1

Erase แอป E84

ปลดบัส I2C ให้ว่าง

2

DFU flash 4000T ที่ 0x08, 400 kHz

วิ่งจนจบเพราะบัสว่าง

3

Flash แอป E84 กลับ

คืนแอป เป็นขั้นสุดท้าย

ถ้า program E84 ก่อน flash 4000T → DFU จะ fail ทุกครั้ง


วิธีที่ 1 — คำสั่งเดียวจบ (script)

ทุก OS (แนะนำ) — ต้องมี Python 3:

macOS / Linux — bash:

script จะ auto-detect KitProg3, เลือก DFU tool ที่รองรับ I2C, บังคับ HID mode, แล้วทำ: erase E84 → flash 4000T (มี retry) → program E84

Flag
ผล

(ไม่ใส่)

erase E84, flash 4000T, ถามยืนยันก่อน erase

--yes

ข้ามการถามยืนยัน erase

--program-after

รัน program คืนแอป E84 ตอนจบให้ด้วย

--no-erase

flash อย่างเดียว (E84 ว่างอยู่แล้ว)

--dry-run

(python) แค่ตรวจหาเครื่องมือ + แสดงแผน ไม่ flash จริง

--file <f.cyacd2>

flash ไฟล์ image อื่น


วิธีที่ 2 — ทำมือทั้งหมด (ไม่ต้องใช้ script)

ใช้วิธีนี้ถ้าอยากรันเองทีละขั้น สิ่งที่ต่างกันแต่ละ OS มีแค่ ตำแหน่งของเครื่องมือ

ตำแหน่งเครื่องมือ

เครื่องมือ
Windows
macOS
Linux

DFU Host Tool (GUI/CLI)

C:\Users\<you>\ModusToolbox\tools_3.x\dfuh-tool\

/Applications/ModusToolbox/tools_3.x/dfuh-tool/

~/ModusToolbox/tools_3.x/dfuh-tool/

fw-loader

...\ModusToolboxProgtools-1.x\fw-loader\bin\fw-loader.exe

/Applications/ModusToolboxProgtools-1.x/fw-loader/bin/fw-loader

~/...Progtools-1.x/fw-loader/bin/fw-loader

แทน 3.x / 1.x ด้วยเวอร์ชันที่ติดตั้งจริง บน Windows ตัว CLI ชื่อ dfuh-cli.exe บน macOS/Linux ชื่อ dfuh-cliใช้รุ่น 2.80 เพราะ 2.120+ ตัด I2C ออก

ขั้น 1 — Erase แอป E84 (ปลดบัส I2C)

เปิด ModusToolbox terminal (Quick Panel → Terminal หรือ modus-shell บน Windows) ที่ project root AIC-EEC_psoc-e84-e2-lvgl-bill แล้วรัน:

(หรือใช้ launch config Erase ใน Quick Panel ของ IDE)

ขั้น 2 — ตั้ง KitProg3 เป็น HID mode (จำเป็นสำหรับ bridge I2C)

ก่อนอื่นหา serial (ส่วนที่ตามหลัง KitProg3-):

แล้วจากโฟลเดอร์ fw-loader:

(โหมด bulk bridge I2C ไม่เสถียร)

ขั้น 3 — Flash 4000T

ง่ายสุด ข้าม OS ได้ — ใช้ GUI:

  1. เปิด Device Firmware Update Host Tool (จาก Quick Panel หรือรัน dfuh-tool จากโฟลเดอร์ข้างบน)

  2. File: เลือก firmware/psoc4-csd-button-slider.cyacd2

  3. Port: KitProg3-... - I2C · I2C address: 8 · Speed: 400 kHz

  4. กด Program (ปิด serial terminal บน KitProg3 ให้หมดก่อน)

หรือใช้ command line (จากโฟลเดอร์ dfuh-tool):

ต้องได้ข้อความ: Operation succeeded.

ขั้น 4 — Flash แอป E84 กลับ (ขั้นสุดท้าย)


ข้อควรระวัง / อ้างอิง

  • ใช้ DFU Host Tool 2.80 (tools_3.6) เวอร์ชัน 2.120 (tools_3.8) ตัด I2C-bridge ออกแล้วdfuh-cli --display-hw จะไม่มีบรรทัด I2C: จึง flash ชิปนี้ไม่ได้ (script เลือกเวอร์ชันที่ใช้ได้ให้อัตโนมัติ)

  • KitProg3 ต้องอยู่ HID mode (fw-loader --mode kp3-hid)

  • I2C address: 0x08 = bootloader, 0x09 = application

  • ถ้า 4000T รัน application ไปแล้ว (เคย flash สำเร็จ ยังไม่ reset) bootloader ที่ 0x08 อาจไม่ตอบ ให้ดึงกลับ bootloader ด้วย Bridge Control Panel (มากับ PSoC™ Programmer) ส่งคำสั่ง:

  • ปิด serial terminal / โปรแกรมอื่นที่จับ KitProg3 ให้หมดก่อน flash

Last updated

Was this helpful?