|
SDK สำหรับ TESAIoT Dev Kit
คู่มืออ้างอิง API และ Tutorial (ModusToolbox)
|
บทนี้ใช้ได้กับทั้ง 2 แพ็กเกจ ฮาร์ดแวร์เป็นชุดเดียวกัน และโค้ด C ที่อ่านบอร์ดฐาน (proj_cm55/modules/cm55_sensor_poll/ และหน้า GPIO & RGB Matrix) ส่งมอบมาในรูปซอร์สในทั้งสองแพ็กเกจ
บทนี้คือคู่มือฮาร์ดแวร์ของบอร์ดฐาน QWA309 ที่อยู่ใต้ AI Kit SoM: สวิตช์ ลูกบิด และ header แต่ละตัวคืออะไร ต่อเข้าขาใด และเฟิร์มแวร์อ่านอะไรได้หรืออ่านอะไรไม่ได้ หน้า GPIO & RGB Matrix บนจอคือคู่หูของบทนี้ ทุกสวิตช์และลูกบิดที่หน้านั้นแสดงจะมีชื่อขากำกับไว้ข้าง ๆ
แผนผังด้านล่างรวมทุกตารางในบทนี้ไว้ในภาพเดียว (ภาษาอังกฤษ) คำอธิบายสีและหมายเหตุภาษาไทยอยู่ใต้ภาพ ถ้าต้องการขยายภาพโดยไม่แตก ให้เปิด ไฟล์ SVG แถวใดในภาพที่ยังยืนยันไม่ได้ บทนี้ระบุไว้ว่ายังไม่ยืนยัน
บอร์ดนี้ใช้ระบบชื่อสองระบบพร้อมกัน: ชื่อที่พิมพ์บนบอร์ด (silkscreen) และ ชื่ออ้างอิงใน schematic (reference designator, refdes) สำหรับสวิตช์ที่ผู้ใช้กดได้ ทั้งสองชื่อไม่ตรงกันเลยสักตัว บทนี้จึงให้ทั้งสองชื่อเสมอ เช่น "SW1 ที่พิมพ์ไว้ (refdes SW5)"
ชื่อ SW3 หมายถึงชิ้นส่วนสองชิ้นที่ต่างกัน: SW3 ที่พิมพ์บนบอร์ดคือสวิตช์เลื่อนที่ตัวควบคุม CapSense อ่าน ส่วน refdes SW3 คือสวิตช์จ่ายไฟของ mikroBUS เมื่ออ่านเอกสารอื่นหรือคุยกับผู้อื่น ให้ถามเสมอว่าหมายถึงชื่อแบบใด
ปุ่มกดสองปุ่มบน E84 คือ SW6 (P17.5 ปุ่มบน) และ SW5 (P17.7 ปุ่มล่าง) ชื่อขาพิมพ์ไว้ข้างปุ่มแต่ละปุ่ม
| ชื่อที่พิมพ์ | refdes | ชนิด | ต่อเข้า | เฟิร์มแวร์อ่านอย่างไร |
|---|---|---|---|---|
| SW1 | SW5 | ปุ่มกด | ขา P2.5 ของตัวควบคุม CapSense | ผ่านตัวควบคุมเท่านั้น และเฉพาะเมื่อเฟิร์มแวร์ของมันใช้ protocol 0x0D หรือ 0x0E |
| SW2 | SW6 | ปุ่มกด | ขา P3.0 ของตัวควบคุม | เหมือนข้างบน |
| SW3 | SW7 | สวิตช์เลื่อน | ขา P4.0 ของตัวควบคุม | เหมือนข้างบน (ON/OFF) |
| SW4 | SW8 | สวิตช์เลื่อน | ขา P4.1 ของตัวควบคุม | เหมือนข้างบน (ON/OFF) |
| SW5 | SW10 | ปุ่มกด | P17.7 ของ E84 | Cy_GPIO_Read() ได้ 0 เมื่อกด |
| SW6 | SW9 | ปุ่มกด | P17.5 ของ E84 | Cy_GPIO_Read() ได้ 0 เมื่อกด — อ่าน P17.5 และ P17.7: ขาที่ใช้ร่วมกัน และอันตรายหนึ่งข้อ ก่อนใช้ |
| BTN0, BTN1, slider | — | ปุ่มสัมผัสและแถบเลื่อนแบบสัมผัส | ตัวควบคุม CapSense | ผ่านตัวควบคุม ใช้ได้กับเฟิร์มแวร์ทุกแบบ |
SW1 ถึง SW4 ไม่ได้ต่อเข้า E84 ไม่มีขาใดของ E84 ที่อ่านสวิตช์เหล่านี้ได้โดยตรง ทิศทางที่เป็น ON ของ SW3 และ SW4 ดูจาก drawing ไม่ได้ ให้เลื่อนสวิตช์แล้วดูค่าบนหน้า GPIO & RGB Matrix
| ชื่อที่พิมพ์ | ขา | ช่อง SAR | refdes |
|---|---|---|---|
| VR1 | P15.5 | 5 | VR2 |
| VR2 | P15.4 | 4 | VR1 |
| VR3 | P15.6 | 6 | VR3 |
| VR4 | P15.7 | 7 | VR4 |
ชื่อขาที่พิมพ์ข้างลูกบิดแต่ละตัวถูกต้อง มีแต่หมายเลข VR1/VR2 ที่สลับกับ refdes ใน schematic เฟิร์มแวร์ยึดชื่อที่พิมพ์ไว้ (s_pot_adc_ch[] มีค่า { 5, 4, 6, 7 } ใน cm55_sensor_poll.c)
ลูกบิดแต่ละตัวเป็น 10 kOhm ต่อคร่อมระหว่างราง analog 1.8 V กับ GND ขากลางจึงแกว่งได้ 0 ถึง 1800 mV และ SAR อ่านช่วงนั้นเป็น 0 ถึง 4095 ค่ามิลลิโวลต์จึงเป็น raw * 1800 / 4095 หน้า GPIO & RGB Matrix แสดงทั้งค่า mV และค่า raw
สวิตช์กลุ่มนี้เป็นสวิตช์เลื่อนทั้งหมด และ เฟิร์มแวร์อ่านตำแหน่งของมันไม่ได้ (ชื่อในตารางเป็น refdes)
| refdes | หน้าที่ |
|---|---|
| SW2 | ไฟ 3.3 V ของกล้อง |
| SW3 | ไฟ 3.3 V และ 5 V ของช่อง mikroBUS ทั้งสามช่อง |
| SW4 | ไฟ 3.3 V และ 5 V ของ header Arduino |
| SW11 | ไฟ 5 V ของ RGB matrix |
| SW12 | ON: ต่อตัวควบคุม CapSense เข้าบัส I2C หลัก (P17.0/P17.1) OFF: แยกออก |
| SW13 | ON: ต่อ P16.2/P16.3 เข้าตัวรับส่ง CAN OFF: ปล่อยขาให้กล้องหรือ SPI |
| SW14 | ON: ต่อ P17.5 เข้าขา RE และ P17.7 เข้าขา DE ของตัวรับส่ง RS-485 |
สายข้อมูลของ RS-485 ต่ออยู่ตลอด ไม่ผ่านสวิตช์: RO ของตัวรับส่ง ISL3178 เข้า P13.1 (SCB7 UART RX) และ DI รับจาก P13.2 (SCB7 UART TX) SW14 สลับเฉพาะขา RE และ DE
มันคือ MCU อีกตัวหนึ่ง ตัวควบคุม CapSense คือ PSoC 4000T (U6) ที่อยู่บนบอร์ดฐาน มีเฟิร์มแวร์ของตัวเอง และใช้ไฟ 1.8 V การ flash E84 ผ่าน KitProg3 ไม่เคย เปลี่ยนเฟิร์มแวร์ของมัน ช่องทางเดียวที่โปรแกรมมันได้คือ header P4 (SWD, 1.8 V เท่านั้น)
E84 คุยกับมันอย่างไร ที่ I2C address 0x08 บน P17.0/P17.1 เมื่อ SW12 อยู่ที่ ON ตัวควบคุมยังออกที่ header P5 ซึ่งเป็นบัส 1.8 V ด้วย ห้ามต่ออุปกรณ์ 3.3 V เข้า P5
ไฟ LED สีเขียว D4 ข้าง P4 ติดเฉพาะเมื่อมีอุปกรณ์ที่ต่อเข้า P4 หรือ P5 จ่ายไฟราว 1.8 V ที่ขา 1 เช่นเครื่องโปรแกรม ไม่มีวงจรบนบอร์ดใดจ่ายไฟให้ขานี้ D4 ที่ดับอยู่จึงเป็นเรื่องปกติ และไม่ได้บอกว่าตัวควบคุมไม่มีไฟ
ข้อมูลที่มันส่งมา ตัวควบคุมอาจรันเฟิร์มแวร์แบบใดแบบหนึ่งจากสองแบบ:
บิตในไบต์สถานะของแบบ snapshot:
| บิต | ความหมาย |
|---|---|
| 0x01 | แตะ BTN0 อยู่ |
| 0x02 | กด SW1 อยู่ |
| 0x04 | กด SW2 อยู่ |
| 0x08 | SW3 อยู่ที่ ON |
| 0x10 | SW4 อยู่ที่ ON |
| 0x20 | แตะ BTN1 อยู่ |
| 0x40 | ตัวควบคุมรายงานความผิดพลาด |
| 0x80 | ตัวควบคุมกำลังทำงาน |
ตัวควบคุมกรองการเด้งของ SW1 ถึง SW4 ให้แล้วก่อนรายงาน
เทมเพลตอ่านอย่างไร ทุก 50 ms CM55 อ่านหกไบต์จาก 0x08 โดยไม่เขียน register address ก่อน (การอ่านจึงเริ่มที่ต้นบัฟเฟอร์ของตัวควบคุม) แล้วถอดรหัสได้ทั้งสองแบบ (cm55_capsense_frame.h) ถ้าสองไบต์แรกเป็น C5 0D หรือ C5 0E ก็ใช้แบบ snapshot มิฉะนั้นใช้แบบเดิม สถานะของ SW1 ถึง SW4 มีให้เฉพาะเมื่อเป็นแบบ snapshot
บรรทัดสถานะของหน้า GPIO & RGB Matrix บอกได้ว่าอยู่ในกรณีใด:
การ flash E84 ใหม่แก้ปัญหาที่ตัวควบคุมไม่ได้ และในทางกลับกัน การเปลี่ยนเฟิร์มแวร์ของตัวควบคุมก็เปลี่ยนสิ่งที่หน้าจอแสดงได้ แม้ E84 จะยังรันอิมเมจเดิม
หมายเลข D เป็นตำแหน่งมาตรฐานของ Arduino Uno ไม่ได้พิมพ์ไว้บนบอร์ด
| ขาของ Uno | ขาของ E84 | หมายเหตุ |
|---|---|---|
| D0 | P15.0 | UART RX (SCB9) |
| D1 | P15.1 | UART TX |
| D2 | P13.0 | |
| D3 | P13.5 | ใช้ร่วมกับ INT ของ mikroBUS ช่อง 2 |
| D4 | P13.6 | ใช้ร่วมกับ INT ของ mikroBUS ช่อง 3 |
| D5 | P13.4 | PWM |
| D6 | P13.3 | PWM |
| D7 | P13.7 | |
| D8 | P15.3 | PWM หรือ GPIO ใช้เป็นอนาล็อกไม่ได้ (ดูหมายเหตุใต้ตาราง) |
| D9 | P15.2 | PWM หรือ GPIO ใช้เป็นอนาล็อกไม่ได้ (ดูหมายเหตุใต้ตาราง) |
| D10 | P9.0 | SPI SS บอร์ดพิมพ์ไว้ว่า "P9.2" ซึ่งผิด |
| D11 | P9.2 | SPI MOSI |
| D12 | P9.1 | SPI MISO |
| D13 | P9.3 | SPI SCK |
| SDA / SCL | P17.1 / P17.0 | บัส I2C หลัก |
| ขา | ช่อง 1 | ช่อง 2 | ช่อง 3 |
|---|---|---|---|
| AN, RST | ไม่ต่อ | ไม่ต่อ | ไม่ต่อ |
| CS | ไม่ต่อ | ไม่ต่อ | P16.4 |
| SCK | ไม่ต่อ | ไม่ต่อ | P16.0 |
| MISO | ไม่ต่อ | ไม่ต่อ | ไม่ต่อ |
| MOSI | ไม่ต่อ | ไม่ต่อ | P16.1 |
| PWM | P16.5 | P16.6 | P16.7 |
| INT | ไม่ต่อ | P13.5 | P13.6 |
| TX | ไม่ต่อ | P17.2 | P11.1 |
| RX | ไม่ต่อ | P17.3 | P17.4 |
| SCL / SDA | P17.0 / P17.1 | P17.0 / P17.1 | P17.0 / P17.1 |
บอร์ดฐาน ไม่มี I3C ไม่มี net I3C บน schematic แผ่นใดเลย I3C ที่พบในเอกสารเป็นของ SoM ซึ่งใช้ภายในกับ BMM350 header ที่พิมพ์ว่า "I2C 1.8V ONLY" คือ P5 ซึ่งเป็นบัสของตัวควบคุม CapSense เอง บัส 3.3 V หลัก (P17.0/P17.1) ใช้ pull-up บน SoM ตัวต้านทาน pull-up บนบอร์ดฐาน (R1/R2) ไม่ได้ใส่ บัสนี้ออกมาที่พอร์ต I2C 4 ขาสองตัว คือ P2 และ P14 (1 SCL, 2 SDA, 3 GND, 4 3.3 V) ตำแหน่งของสองพอร์ตนี้บนบอร์ดยังไม่ได้ระบุ
| ขา | ใช้ร่วมกับ |
|---|---|
| P17.5 | ปุ่มกด SW6 · สายกล้องบน J4 (net ของบอร์ดฐานชื่อ PEN ส่วน BSP ของ SoM เรียกว่า camera reset) · ขา RE ของ RS-485 ผ่าน SW14 · ขาเปิดไฟ VBUS ของ USB host |
| P17.7 | ปุ่มกด SW5 · สายกล้องบน J4 (net ชื่อ PDN, BSP เรียกว่า camera power-down) · ขา DE ของ RS-485 ผ่าน SW14 |
โมดูลกล้องและสวิตช์ไฟของมัน (SW2) อาจโหลดสายเหล่านี้ได้ ผลต่อการอ่านปุ่มยังไม่ได้วัด
ขาเปิด VBUS ของ USB host ใช้ P17.5 ร่วมกับปุ่มนี้ หน้า GPIO & RGB Matrix ตั้ง P17.5 ใหม่เป็นอินพุต
ภาพ pinout ชุดเก่าที่แจกพร้อมบอร์ด (ไม่ใช่แผนผังในบทนี้) (ระบุว่า Version 3.1) ขัดกับ schematic สี่จุด: แสดง A0 ถึง A3 อยู่บน P15.2 ถึง P15.5 (ที่จริงไม่ได้ต่อสาย), แสดง VR1 อยู่บน P15.2, แสดงปุ่ม SW5/SW6 อยู่บน "P8.x" และแสดง D0 เป็น P9.0 (ที่จริงคือ P15.0) ให้ใช้บทนี้หรือ schematic แทน
ทุกอย่างด้านล่างทำงานบน CM55 และเรียกจาก GFX task (task ที่ LVGL ทำงาน) ซึ่งเป็นสิ่งที่หน้า GPIO & RGB Matrix (page_gpio_rgb.c) ทำ