I2C ้ไฟกๅบๅๆฆ่ฟฐ
ไธๅพๅฑ็คบไบ I2C ไธญๆงๅถๅจไธ็ฎๆ ่ฎพๅคไน้ด็้ไฟกๅบๅใ
ๅพ๏ผI2C ๆงๅถๅจไธ็ฎๆ ่ฎพๅค้ไฟกๅบๅ
ไพๅฆ๏ผไปปไฝ่ฎพๅค้ฝไธ่ฝไฝฟ็จ I2C ่ง่ไธญๅๅบ็ 1111-0XX ไปฅๅๆถ้้ข็ไธบ 3.4 MHz ็้ซ้ๆจกๅผใ ไปฅไธๆฏ I2C ๆจกๅผๅๅ ถๆฏๆ็้ๅบฆใ- ๆ ๅๆจกๅผ๏ผ100 kbps
- ๅฟซ้ๆจกๅผ๏ผ400 kbps
- ๅฟซ้ๆจกๅผๅขๅผบ็๏ผFast mode plus๏ผ๏ผ1 Mbps
I2C ๆฐๆฎๅ ๆ ผๅผ
ๆงๅถๅจๅ้ 7 ไฝๆ 10 ไฝๅฐๅ๏ผๅฆไธๅพๆ็คบใ้คๅฐๅๅค๏ผ่ฟไผๅ้ 1 ไฝ่ฏป/ๅไฝไปฅๆ็คบๆไฝ็ฑปๅใๆฐๆฎไปฅ 8 ไฝไธบไธ็ปๅจ SDA ็บฟไธไผ ่พใๆฏไผ ่พไธไธชๅญ่๏ผๆฅๆถๆฐๆฎ็่ฎพๅค้ฝไผๅ้ไธไธช ACK ไฝ๏ผๅ ฑไนไธชๆถ้่ๅฒ๏ผใ- ACK ไฝไธบไฝ็ตๅนณ๏ผๆฅๆถๆฐๆฎๅนถๅๅคๅฅฝๆฅๅไธไธไธชๅญ่ใ
- ACK ไฝไธบ้ซ็ตๅนณ๏ผๆฅๆถๆฐๆฎไฝๆ ๆณๅๆฅๅๆดๅคๆฐๆฎใๆงๅถๅจ้ๅไปฅ STOP ๅบๅ็ปๆญขไผ ่พใ

ๅพ๏ผI2C ๆฐๆฎๅ
I2C ๅบๅ
ๅฝ SCL ไธบ้ซ็ตๅนณๆถ๏ผSDA ๅฟ ้กปไฟๆ็จณๅฎไธไธ่ฝๆนๅใๅชๆๅฝๆถ้็บฟไธบไฝ็ตๅนณๆถ๏ผๆฐๆฎ็บฟๆ่ฝๆนๅใไฝๆฏ๏ผๆไธคไธชไพๅค๏ผSTART ๅ STOP ๅบๅใ
ๅพ๏ผI2C ๅบๅ
I2C ็นๆง
ๆฌ่ไป็ป I2C ไธฒ่กๅผๆไผ ่พๆจกๅผไปฅๅๆฏ็งๆจกๅผ็ไธๅไฝฟ็จๅบๆฏใไธ่กจๅๅบไบๅจๅไธช I2C ๅญ็ณป็ป้ฉฑๅจ็จๅบไธญๅฏ็จ็ไผ ่พๆจกๅผใ ่กจ๏ผI2C ไผ ่พๆจกๅผ| ๅญ็ณป็ป | ไผ ่พๆจกๅผ | ่ฏดๆ |
|---|---|---|
| Linux |
|
|
| Boot | FIFO | |
| aDSP/Qualcomm TEE/SDC | FIFO |
I2C ๆฅๅฃ็ปไปถ
ๆฌ่ๆไพๆๅ ณๅญ็ณป็ป้ฉฑๅจ็จๅบใๅ ๆ ธ่ฎพๅคๆ ่็นไปฅๅ็ธๅ ณๆๆกฃ็ไฟกๆฏใ ่กจ๏ผI2C ๆฅๅฃ๏ผLinux| ๆไปถ็ฑปๅ | ่ฏดๆ |
|---|---|
| ่ฎพๅคๆ ๆบๆไปถ |
|
Pinctrl ่ฎพ็ฝฎ |
|
| Qualcomm TEE ่ฎพ็ฝฎ |
|
| ๆไปถ็ฑปๅ | ่ฏดๆ |
|---|---|
| QUP v3 ไธฒ่กๅผๆ้ ็ฝฎ |
|
| Qualcomm TEE ่ฎพ็ฝฎ |
|
| ๆไปถ็ฑปๅ | ่ฏดๆ |
|---|---|
| QUP v3 ไธฒ่กๅผๆ้ ็ฝฎ |
|
| ๅบไปถ้ ็ฝฎ่ฎพ็ฝฎ |
|
| ๆไปถ็ฑปๅ | ่ฏดๆ |
|---|---|
| QUP v3 ไธฒ่กๅผๆ้ ็ฝฎ |
|
| Qualcomm TEE ่ฎพ็ฝฎ |
|
I2C API
ๆฌ่ๅๅบไบไปฅไธๅญ็ณป็ป็ I2C APIใ- Linux๏ผ
- Boot๏ผboot_images/boot/QcomPkg/Include/i2c_api.h
- aDSP/SDC/SLPI๏ผadsp_proc/core/api/buses/i2c_api.h
- Qualcomm TEE๏ผtrustzone_images/core/buses/api/i2c/qupv3/i2c_api.h
I2C ่ฝฏไปถ่ฎพๅคๆ ้ ็ฝฎ
ๆฌ่ๆไพๆๅ ณ I2C ่ฎพๅคๆ ้ ็ฝฎไปฅๅ่ฎพๅค่็นๆๆกฃ็ไฟกๆฏใLinux
ๆๅ ณ้ ็ฝฎ่ฎพ็ฝฎๆไปถ๏ผ่ฏทๅ้ ไปฅไธ DTSI ๆไปถใ- QCS6490 ๅ QCS5430๏ผhttps://git.linaro.org/kernel-org/linux-next.git/tree/arch/arm64/boot/dts/qcom/sc7280.dtsi
- Dragonwing IQ-9075๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/sa8775p.dtsi
- Dragonwing IQ-615๏ผhttps://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git/tree/arch/arm64/boot/dts/qcom/qcs615.dtsi?h=arm64-for-6.16
i2c-geni-qcom.yaml ๆไปถ๏ผไปฅๅไฝไบ https://github.com/torvalds/linux/blob/master/drivers/i2c/busses/i2c-qcom-geni.c ๆไปถไธญ็ I2C ้ฉฑๅจ็จๅบใ
pinctrl ้
็ฝฎ็ๅ
ๆ ธๆๆกฃ๏ผ่ฏทๅ้
ไปฅไธๆไปถใ
- QCS6490 ๅ QCS5430๏ผhttps://git.linaro.org/kernel-org/linux-next.git/tree/arch/arm64/boot/dts/qcom/sc7280.dtsi
- Dragonwing IQ-9075๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/sa8775p.dtsi
- Dragonwing IQ-615๏ผhttps://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git/tree/arch/arm64/boot/dts/qcom/qcs615.dtsi?h=arm64-for-6.16
Documentation/devicetree/bindings/pinctrl/qcom,<chipset>-tlmm.yaml
pinctrl.dtsi ๆไปถไธญๅนถๅทฒๅฎๆๆ ๅฐใ
QUPAC_Access.c ๆไปถไธญ๏ผ็กฎไฟๆๅฎๅ่ฎฎ็็นๅฎไธฒ่กๅผๆ้
็ฝฎ็จไบ I2C ๅ่ฎฎใQualcomm TEE ๆๅปบ๏ผ
Boot
- ๅจ UEFI ไธญ้
็ฝฎ I2Cใๅฏไปไปฅไธไฝ็ฝฎ่ฎฟ้ฎ้
็ฝฎๆไปถใ
- QUP v3 ไธฒ่กๅผๆ๏ผ
/firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/BOOT.MXF.1.0.c1/boot_images/boot/Settings/Soc/<chipset>/Core/Buses/qup_common/<chipset>-qupv3.dtsi - Qualcomm TEE ่ฎพ็ฝฎ๏ผ
/firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/TZ.XF.5.0/trustzone_images/core/settings/buses/qup_accesscontrol/qupv3/config/<chipset>/QUPAC_Access.c
- QUP v3 ไธฒ่กๅผๆ๏ผ
ๆณจๆ๏ผๆๅ
ณ boot ไธญ็้
็ฝฎ่ฎพ็ฝฎ๏ผ่ฏทๅ้
Bootใ
- ๅจ UEFI ไธญ้่ฟ
/QcomPkg/SocPkg/<chipset>/LAA/Core.fdfๅฏ็จ I2C ๅ่ฎฎใ - ๅบ็จ็จๅบๅฏ็จ I2C ๆฅๅฃใ็ถๅๅบ็จ็จๅบ้่ฟ I2C ๆฅๅฃๆง่ก่ฏปๅๆไฝใๆๅ
ณ I2C ๅฝๆฐไฝฟ็จ็ไฟกๆฏ๏ผ่ฏทๅ้
boot_images/QcomPkg/QcomTestPkg/I2CApp/I2Ceeprom.cใ - ๅจไปฃ็ ไธญๆ้กบๅบๆทปๅ
i2c_open->i2c_read/i2c_write->i2c_closeใ - ๅจ่ฐ็จ
I2c_openไนๅ๏ผ้่ฟ้ช่ฏ่ฎพๅค/UEFI ๅฏๅจๆฅๅฟ็กฎไฟGpiDxe.infๅI2C.efiๆไปถๅทฒๅ ่ฝฝใ
aDSP/SDC
ไฝฟ็จ SSC QUP ็ๅบไปถๅ ่ฝฝๅจ aDSP ๅญ็ณป็ป็ๅฏๅจๅบๅๆ้ดๆง่กใ้ ็ฝฎๆไปถไฝไบ aDSP ๆๅปบไธญ็ไปฅไธไฝ็ฝฎ๏ผQualcomm TEE
ๅฏไปฅๆๅฆไธๆนๅผ้ ็ฝฎ็จไบ I2C ็ QUP v3 ไธฒ่กๅผๆใๆไปถ่ทฏๅพ๏ผENABLE_I2C_<num> ็็ผๅทๅบไบไธฒ่กๅผๆ็ๅบๅท๏ผไป 0 ๅผๅง๏ผใไพๅฆ๏ผๅฆๆๆไธคไธช QUP๏ผQUPV3_0 ๆไธไธชไธฒ่กๅผๆ๏ผQUPV3_1 ๆๅ
ซไธชไธฒ่กๅผๆ๏ผ้ฃไน็จๆทๅฟ
้กปๅฏ็จ QUPV3_2_SE2ใ่ฏฅๅฎๅบไธบ ENABLE_I2C_08ใ
GPIO ้
็ฝฎ๏ผ้ฉฑๅจๅผบๅบฆๅไธไธๆๆๅผ่้
็ฝฎ๏ผSDA ไฝไบ็ดขๅผ 0๏ผSCL ไฝไบ็ดขๅผ 1ใๆไปถ่ทฏๅพ๏ผ
้ ็ฝฎ I2C ๆฅๅฃ
ๆฌ่ๆไพๆๅ ณ I2C ่ฝฏไปถ้ฉฑๅจ็จๅบๅ ๆ ธ้ ็ฝฎๅ่ฎพๅคๆ ่็นๆดๆน็ไฟกๆฏใLinux
ๆฏๆ I2C ๆฅๅฃ้่ฆไปฅไธ้ฉฑๅจ็จๅบๅ ๆ ธ้ ็ฝฎใ- ้ฉฑๅจ็จๅบๆบไปฃ็ ๏ผhttps://github.com/torvalds/linux/blob/master/drivers/i2c/busses/i2c-qcom-geni.c
-
ๅ
ๆ ธ
defconfigๆไปถ่ทฏๅพ๏ผ
CONFIG_QCOM_GENI_SE=yCONFIG_I2C_CHARDEV=mCONFIG_I2C_QCOM_GENI=m๏ผ็จไบ้ ็ฝฎ็จๆท็ฉบ้ดๅบ็จ็จๅบCONFIG_QCOM_GPI_DMA=m๏ผ็จไบๅฏ็จ GSI ๆฏๆ
/arch/arm64/boot/dts/qcom/<chipset>.dtsi ๆไปถใ
ๆณจๆ๏ผๆจๅบ็ผ่ฏๅ
ๆ ธ้
็ฝฎๅ่ฎพๅคๆ ๆดๆนใ็ผ่ฏๅ๏ผๅฏไปฅๅฐ้ๅๅ ่ฝฝๅฐ่ฎพๅคไปฅ้ช่ฏๆฅๅฃใๆๅ
ณๆฅๅฃ้ช่ฏ็ไฟกๆฏ๏ผ่ฏทๅ้
Verify I2C interface ้จๅใ
้ช่ฏ I2C ๆฅๅฃ
ๆฌ่ไป็ป I2C ้ฉฑๅจ็จๅบๅ Qualcomm ้ฉฑๅจ็จๅบ็้ช่ฏ่ฟ็จไธๆต่ฏ็ปๆใLinux
ๆๅ ณไธๆธธ I2C ๅ ๆ ธๆต่ฏๅบ็จ็จๅบ๏ผ่ฏทๅ้ https://cdn.kernel.org/pub/software/utils/i2c-tools/i2c-tools-4.3.tar.gzใ ่ฆไบคๅ็ผ่ฏๅทฅๅ ท๏ผ่ฏทๆง่กไปฅไธๆไฝใ- ไป https://cdn.kernel.org/pub/software/utils/i2c-tools/i2c-tools-4.3.tar.gz ไธ่ฝฝ
i2c-toolใ - ไปไธ่ฝฝ็
tarๆไปถไธญๆๅๅทฅๅ ทใ - ๅฐๅฝๅ็ฎๅฝๅๆขๅฐ
i2c-tool่ทฏๅพใ - ๅฎ่ฃ
ๅทฅๅ
ทใ
- ่ฎพ็ฝฎไบคๅ็ผ่ฏ็ฏๅขใ
- ็ผ่ฏๅทฅๅ
ทใ
ไบ่ฟๅถๆไปถ็ๆไบ
<i2c-tool-path>/tools/ใ
dev ่็น๏ผ/dev/i2c-0 ๅ /dev/i2c-1๏ผๆฅ้ช่ฏ้ฉฑๅจ็จๅบ๏ผๆไฝฟ็จ ADB shellใๆๅ
ณๅฆไฝ่ฟ่ก SSH ็ๆดๅคไฟกๆฏ๏ผ่ฏทๅ้
Use SSH ้จๅใ
้ช่ฏ I2C ้ฉฑๅจ็จๅบ
- ่ฆ้ช่ฏ I2C ้ฉฑๅจ็จๅบ๏ผ่ฏทๆง่กไปฅไธๆไฝ๏ผ
- ๅจ permissive ๆจกๅผไธๆๅผ SSH shell๏ผๆไฝฟ็จ ADB shellใ
- ๆ่ฝฝๆไปถ็ณป็ปใ
- ไฝฟ็จ SCP ๆ็ฑปไผผๅทฅๅ
ทไผ ่พๆไปถใ
ไพๅฆ๏ผ
scp i2cdetect root@10.92.162.185:/bin - ๅ้
ๆง่กๆ้ใ
- ไฝฟ็จ
i2cdetectๅทฅๅ ท้ช่ฏ I2C ่ฎพๅคใไพๅฆ๏ผ./i2cdetect -y -r <i2c_instance_num>ใๅฐๆพ็คบไปฅไธ่พๅบใ
่ฐ่ฏ I2C ้ฎ้ข
ๆฌ่ไป็ป I2C ่ฝฏไปถ้ฉฑๅจ็จๅบ็้ป่ฎคๆฅๅฟ่ฎฐๅฝๆนๆณ๏ผ็จไบๅฏ็จ I2C ไผ ่พๅคฑ่ดฅ็ๆฅๅฟ่ฎฐๅฝใLinux
I2C ้ฉฑๅจ็จๅบๆฅๅฟ้่ฟๅ ๆ ธๅจๆ่ฐ่ฏๆนๆณๅฏ็จใๅจไปฅไธๆไปถไธญๅฏ็จCONFIG_DYNAMIC_DEBUG ไปฅๆฏๆๅ
ๆ ธ้ฉฑๅจ็จๅบ็ๅจๆ่ฐ่ฏใ
dmesg๏ผไธญๅฏ็จๅนถๆฅ็ I2C ้ฉฑๅจ็จๅบๆฅๅฟ๏ผ่ฏท่ฟ่กไปฅไธๅฝไปคใ
[ 8.583248] geni_i2c a94000.i2c: Invalid proto 1๏ผ่ฏทๆง่กไปฅไธๆไฝใ
- ่ฏๅซๆฟ็ฑปๅใ
็คบไพ๏ผQUPV3_1_SE5 ๆฟ็ฑปๅ่ฏฆ็ปไฟกๆฏ
- ไปๅ
ๆ ธๆฅๅฟไธญ๏ผๅจไปฅไธไฝ็ฝฎๆพๅฐๅนณๅฐ ID ๅๅญ็ฑปๅ็ธๅ
ณ่ฏฆ็ปไฟกๆฏ๏ผ
- ่ทๅ Qualcomm TEE
QUPAC_Access.cๆไปถ็้ ็ฝฎใ - ่ฏๅซ็นๅฎไบ่ฏฅไธฒ่กๅผๆ็้ ็ฝฎใ
- ๅจ
QUPAC_Access.xmlๆไปถไธญๆพๅฐๅนณๅฐ ID ็ฑปๅใ - ๅฐๆญคๅนณๅฐ ID ็ฑปๅๆ ๅฐๅฐ
QUPAC_Access.cๆไปถไธญ็ธๅบ็qupv3_perms็ปๆใ - ้ช่ฏ
QUPAC_Access.cๆไปถไธญ็ๅ่ฎฎๅๆจกๅผ้ ็ฝฎใ
I2C ็คบไพ
ๆๅ ณไธๆธธ่ฎพๅคๆ ๅ่็ไฟกๆฏ๏ผ่ฏทๅ้ ไปฅไธ DTSI ๆไปถใ- QCS6490 ๅ QCS5430๏ผhttps://git.linaro.org/kernel-org/linux-next.git/tree/arch/arm64/boot/dts/qcom/sc7280.dtsi
- Dragonwing IQ-9075๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/sa8775p.dtsi
- Dragonwing IQ-615๏ผhttps://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git/tree/arch/arm64/boot/dts/qcom/qcs615.dtsi?h=arm64-for-6.16
- QCS6490 ๅ QCS5430๏ผhttps://git.linaro.org/kernel-org/linux-next.git/tree/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts
- Dragonwing IQ-9075๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/sa8775p.dtsi
- Dragonwing IQ-615๏ผhttps://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git/tree/arch/arm64/boot/dts/qcom/qcs615.dtsi?h=arm64-for-6.16

