Skip to main content
้›†ๆˆ็”ต่ทฏ้—ดๆ€ป็บฟ๏ผˆI2C๏ผ‰ๆ˜ฏไธ€็งๅŒๅ‘ 2 ็บฟๆ€ป็บฟ๏ผŒๆ˜ฏ Philips ไบŽ 20 ไธ–็บช 80 ๅนดไปฃๅผ€ๅ‘็š„้ซ˜ๆ•ˆ IC ้—ดๆŽงๅˆถๆ€ป็บฟใ€‚ๆ€ป็บฟไธŠ็š„ๆฏไธช่ฎพๅค‡้ƒฝๆœ‰่‡ชๅทฑๅ”ฏไธ€็š„ๅœฐๅ€๏ผˆๅœจ็”ฑ Philips ้ข†ๅฏผ็š„ I2C ๆ€ปๆœบๆž„ๆณจๅ†Œ๏ผ‰ใ€‚I2C ๆ ธๅฟƒๆ”ฏๆŒๅคšๆŽงๅˆถๅ™จๆจกๅผไปฅๅŠ 10 ไฝ็›ฎๆ ‡ๅœฐๅ€ๅ’Œ 10 ไฝๅฏๆ‰ฉๅฑ•ๅœฐๅ€ใ€‚ๆœ‰ๅ…ณ I2C ็š„ๆ›ดๅคšไฟกๆฏ๏ผŒ่ฏทๅ‚้˜… https://www.i2c-bus.org/fileadmin/ftp/i2c_bus_specification_1995.pdfใ€‚

I2C ้€šไฟกๅบๅˆ—ๆฆ‚่ฟฐ

ไธ‹ๅ›พๅฑ•็คบไบ† I2C ไธญๆŽงๅˆถๅ™จไธŽ็›ฎๆ ‡่ฎพๅค‡ไน‹้—ด็š„้€šไฟกๅบๅˆ—ใ€‚
I2C ๆ•ฐๆฎๆต

ๅ›พ๏ผšI2C ๆŽงๅˆถๅ™จไธŽ็›ฎๆ ‡่ฎพๅค‡้€šไฟกๅบๅˆ—

ไพ‹ๅฆ‚๏ผŒไปปไฝ•่ฎพๅค‡้ƒฝไธ่ƒฝไฝฟ็”จ I2C ่ง„่Œƒไธญๅˆ—ๅ‡บ็š„ 1111-0XX ไปฅๅŠๆ—ถ้’Ÿ้ข‘็އไธบ 3.4 MHz ็š„้ซ˜้€Ÿๆจกๅผใ€‚ ไปฅไธ‹ๆ˜ฏ I2C ๆจกๅผๅŠๅ…ถๆ”ฏๆŒ็š„้€Ÿๅบฆใ€‚
  • ๆ ‡ๅ‡†ๆจกๅผ๏ผš100 kbps
  • ๅฟซ้€Ÿๆจกๅผ๏ผš400 kbps
  • ๅฟซ้€Ÿๆจกๅผๅขžๅผบ็‰ˆ๏ผˆFast mode plus๏ผ‰๏ผš1 Mbps
ๆ”ฏๆŒ็š„ๆœ€ๅคงๅธฆๅฎฝไธบ 1 MHzใ€‚

I2C ๆ•ฐๆฎๅŒ…ๆ ผๅผ

ๆŽงๅˆถๅ™จๅ‘้€ 7 ไฝๆˆ– 10 ไฝๅœฐๅ€๏ผŒๅฆ‚ไธ‹ๅ›พๆ‰€็คบใ€‚้™คๅœฐๅ€ๅค–๏ผŒ่ฟ˜ไผšๅ‘้€ 1 ไฝ่ฏป/ๅ†™ไฝไปฅๆŒ‡็คบๆ“ไฝœ็ฑปๅž‹ใ€‚ๆ•ฐๆฎไปฅ 8 ไฝไธบไธ€็ป„ๅœจ SDA ็บฟไธŠไผ ่พ“ใ€‚ๆฏไผ ่พ“ไธ€ไธชๅญ—่Š‚๏ผŒๆŽฅๆ”ถๆ•ฐๆฎ็š„่ฎพๅค‡้ƒฝไผšๅ›ž้€ไธ€ไธช ACK ไฝ๏ผˆๅ…ฑไนไธชๆ—ถ้’Ÿ่„‰ๅ†ฒ๏ผ‰ใ€‚
  • ACK ไฝไธบไฝŽ็”ตๅนณ๏ผšๆŽฅๆ”ถๆ•ฐๆฎๅนถๅ‡†ๅค‡ๅฅฝๆŽฅๅ—ไธ‹ไธ€ไธชๅญ—่Š‚ใ€‚
  • ACK ไฝไธบ้ซ˜็”ตๅนณ๏ผšๆŽฅๆ”ถๆ•ฐๆฎไฝ†ๆ— ๆณ•ๅ†ๆŽฅๅ—ๆ›ดๅคšๆ•ฐๆฎใ€‚ๆŽงๅˆถๅ™จ้šๅŽไปฅ STOP ๅบๅˆ—็ปˆๆญขไผ ่พ“ใ€‚
I2C ๆ•ฐๆฎๅŒ…

ๅ›พ๏ผšI2C ๆ•ฐๆฎๅŒ…

I2C ๅบๅˆ—

ๅฝ“ SCL ไธบ้ซ˜็”ตๅนณๆ—ถ๏ผŒSDA ๅฟ…้กปไฟๆŒ็จณๅฎšไธ”ไธ่ƒฝๆ”นๅ˜ใ€‚ๅชๆœ‰ๅฝ“ๆ—ถ้’Ÿ็บฟไธบไฝŽ็”ตๅนณๆ—ถ๏ผŒๆ•ฐๆฎ็บฟๆ‰่ƒฝๆ”นๅ˜ใ€‚ไฝ†ๆ˜ฏ๏ผŒๆœ‰ไธคไธชไพ‹ๅค–๏ผšSTART ๅ’Œ STOP ๅบๅˆ—ใ€‚
I2C ๅบๅˆ—

ๅ›พ๏ผšI2C ๅบๅˆ—

I2C ็‰นๆ€ง

ๆœฌ่Š‚ไป‹็ป I2C ไธฒ่กŒๅผ•ๆ“Žไผ ่พ“ๆจกๅผไปฅๅŠๆฏ็งๆจกๅผ็š„ไธๅŒไฝฟ็”จๅœบๆ™ฏใ€‚ไธ‹่กจๅˆ—ๅ‡บไบ†ๅœจๅ„ไธช I2C ๅญ็ณป็ปŸ้ฉฑๅŠจ็จ‹ๅบไธญๅฏ็”จ็š„ไผ ่พ“ๆจกๅผใ€‚ ่กจ๏ผšI2C ไผ ่พ“ๆจกๅผ
ๅญ็ณป็ปŸไผ ่พ“ๆจกๅผ่ฏดๆ˜Ž
Linux
  • FIFO๏ผˆไฝŽ้€Ÿ๏ผ‰
  • CPU DMA๏ผˆ้ซ˜้€Ÿ๏ผ‰
  • GSI
  • ๆ”ฏๆŒ 100 kHzใ€400 kHz ๅ’Œ 1000 kHz ๆ€ป็บฟ้€Ÿๅบฆ
  • ๆ”ฏๆŒ็ฌฆๅˆ I2C ่ง„่Œƒ็š„ 7 ไฝ็›ฎๆ ‡ๅœฐๅ€
BootFIFO
aDSP/Qualcomm TEE/SDCFIFO

I2C ๆŽฅๅฃ็ป„ไปถ

ๆœฌ่Š‚ๆไพ›ๆœ‰ๅ…ณๅญ็ณป็ปŸ้ฉฑๅŠจ็จ‹ๅบใ€ๅ†…ๆ ธ่ฎพๅค‡ๆ ‘่Š‚็‚นไปฅๅŠ็›ธๅ…ณๆ–‡ๆกฃ็š„ไฟกๆฏใ€‚ ่กจ๏ผšI2C ๆŽฅๅฃ๏ผšLinux
ๆ–‡ไปถ็ฑปๅž‹่ฏดๆ˜Ž
่ฎพๅค‡ๆ ‘ๆบๆ–‡ไปถ
Pinctrl ่ฎพ็ฝฎ
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
่กจ๏ผšI2C ๆŽฅๅฃ๏ผšBoot
ๆ–‡ไปถ็ฑปๅž‹่ฏดๆ˜Ž
QUP v3 ไธฒ่กŒๅผ•ๆ“Ž้…็ฝฎ
  • 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
  • GPIO ้…็ฝฎ๏ผš/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-pinctrl.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
่กจ๏ผšI2C ๆŽฅๅฃ๏ผšaDSP/SLPI/SDC
ๆ–‡ไปถ็ฑปๅž‹่ฏดๆ˜Ž
QUP v3 ไธฒ่กŒๅผ•ๆ“Ž้…็ฝฎ
  • /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/ADSP.HT.5.5.c8/adsp_proc/core/settings/buses/qup_common/config/<chipset>/adsp/ssc/qup_devcfg.c
  • /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/ADSP.HT.5.5.c8/adsp_proc/core/settings/buses/qup_fw/config/<chipset>/fw_devcfg.c
  • settings/buses/qup_common/config/<chipset>/adsp/ssc/qup_devcfg.json
ๅ›บไปถ้…็ฝฎ่ฎพ็ฝฎ
  • /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/ADSP.HT.5.5.c8/adsp_proc/core/settings/buses/qup_fw/config/<chipset>/fw_devcfg.c
  • /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/ADSP.HT.5.5.c8/adsp_proc/core/settings/buses/qup_fw/config/<chipset>/fw_devcfg.xml
่กจ๏ผšI2C ๆŽฅๅฃ๏ผšQualcomm TEE
ๆ–‡ไปถ็ฑปๅž‹่ฏดๆ˜Ž
QUP v3 ไธฒ่กŒๅผ•ๆ“Ž้…็ฝฎ
  • /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/TZ.XF.5.0/trustzone_images/core/settings/buses/i2c/qupv3/config/<chipset>/tz/i2c_devcfg_user.h
  • /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/TZ.XF.5.0/trustzone_images/core/settings/buses/i2c/qupv3/config/<chipset>/tz/i2c_devcfg_user.c
  • /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/TZ.XF.5.0/trustzone_images/core/settings/buses/i2c/qupv3/config/<chipset>/tz/i2c_devcfg.xml
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

I2C API

ๆœฌ่Š‚ๅˆ—ๅ‡บไบ†ไปฅไธ‹ๅญ็ณป็ปŸ็š„ I2C APIใ€‚

I2C ่ฝฏไปถ่ฎพๅค‡ๆ ‘้…็ฝฎ

ๆœฌ่Š‚ๆไพ›ๆœ‰ๅ…ณ I2C ่ฎพๅค‡ๆ ‘้…็ฝฎไปฅๅŠ่ฎพๅค‡่Š‚็‚นๆ–‡ๆกฃ็š„ไฟกๆฏใ€‚

Linux

ๆœ‰ๅ…ณ้…็ฝฎ่ฎพ็ฝฎๆ–‡ไปถ๏ผŒ่ฏทๅ‚้˜…ไปฅไธ‹ DTSI ๆ–‡ไปถใ€‚ ๆœ‰ๅ…ณๆ›ดๅคš่ฏฆ็ป†ไฟกๆฏ๏ผŒ่ฏทๅ‚้˜…ไฝไบŽ https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/i2c/qcom%2Ci2c-geni-qcom.yaml ็š„ i2c-geni-qcom.yaml ๆ–‡ไปถ๏ผŒไปฅๅŠไฝไบŽ https://github.com/torvalds/linux/blob/master/drivers/i2c/busses/i2c-qcom-geni.c ๆ–‡ไปถไธญ็š„ I2C ้ฉฑๅŠจ็จ‹ๅบใ€‚
ๆœ‰ๅ…ณ GPIO pinctrl ้…็ฝฎ็š„ๅ†…ๆ ธๆ–‡ๆกฃ๏ผŒ่ฏทๅ‚้˜…ไปฅไธ‹ๆ–‡ไปถใ€‚ QUP v3 ไธฒ่กŒๅผ•ๆ“Ž GPIO ็š„็›ธๅบ”้…็ฝฎๅญ˜ๅœจไบŽ pinctrl.dtsi ๆ–‡ไปถไธญๅนถๅทฒๅฎŒๆˆๆ˜ ๅฐ„ใ€‚
ๅœจ QUPAC_Access.c ๆ–‡ไปถไธญ๏ผŒ็กฎไฟๆŒ‡ๅฎšๅ่ฎฎ็š„็‰นๅฎšไธฒ่กŒๅผ•ๆ“Ž้…็ฝฎ็”จไบŽ I2C ๅ่ฎฎใ€‚Qualcomm TEE ๆž„ๅปบ๏ผš
ไฟฎๆ”นๆ‰€้œ€็š„่ฎพ็ฝฎ๏ผŒๆˆ–ๅ‚่€ƒไธบ QUP v3 ไธฒ่กŒๅผ•ๆ“Žๅฎžไพ‹ๅˆ†้…็š„้ป˜่ฎค่ฎพ็ฝฎใ€‚ไปฅไธ‹็คบไพ‹้…็ฝฎๅœจ I2C ไธญ้ป˜่ฎคๅฏ็”จใ€‚

Boot

  1. ๅœจ 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
ๆณจๆ„๏ผšๆœ‰ๅ…ณ boot ไธญ็š„้…็ฝฎ่ฎพ็ฝฎ๏ผŒ่ฏทๅ‚้˜… Bootใ€‚
  1. ๅœจ UEFI ไธญ้€š่ฟ‡ /QcomPkg/SocPkg/<chipset>/LAA/Core.fdf ๅฏ็”จ I2C ๅ่ฎฎใ€‚
  2. ๅบ”็”จ็จ‹ๅบๅฏ็”จ I2C ๆŽฅๅฃใ€‚็„ถๅŽๅบ”็”จ็จ‹ๅบ้€š่ฟ‡ I2C ๆŽฅๅฃๆ‰ง่กŒ่ฏปๅ†™ๆ“ไฝœใ€‚ๆœ‰ๅ…ณ I2C ๅ‡ฝๆ•ฐไฝฟ็”จ็š„ไฟกๆฏ๏ผŒ่ฏทๅ‚้˜… boot_images/QcomPkg/QcomTestPkg/I2CApp/I2Ceeprom.cใ€‚
  3. ๅœจไปฃ็ ไธญๆŒ‰้กบๅบๆทปๅŠ  i2c_open->i2c_read/i2c_write->i2c_closeใ€‚
  4. ๅœจ่ฐƒ็”จ I2c_open ไน‹ๅ‰๏ผŒ้€š่ฟ‡้ชŒ่ฏ่ฎพๅค‡/UEFI ๅฏๅŠจๆ—ฅๅฟ—็กฎไฟ GpiDxe.inf ๅ’Œ I2C.efi ๆ–‡ไปถๅทฒๅŠ ่ฝฝใ€‚

aDSP/SDC

ไฝฟ็”จ SSC QUP ็š„ๅ›บไปถๅŠ ่ฝฝๅœจ aDSP ๅญ็ณป็ปŸ็š„ๅฏๅŠจๅบๅˆ—ๆœŸ้—ดๆ‰ง่กŒใ€‚้…็ฝฎๆ–‡ไปถไฝไบŽ aDSP ๆž„ๅปบไธญ็š„ไปฅไธ‹ไฝ็ฝฎ๏ผš
ไปฅไธ‹้…็ฝฎๆ˜ฏๅŠ ่ฝฝไบ† I2C ๅ›บไปถ็š„ SSC QUP SE1ใ€SE2 ๅ’Œ SE3 ่ฎพ็ฝฎ็š„็คบไพ‹ใ€‚
GPIO ้…็ฝฎ๏ผšQUP v3 ้€š็”จ้ฉฑๅŠจ็จ‹ๅบไธญ็š„ๆฏไธชไธฒ่กŒๅผ•ๆ“Ž้ƒฝ้…็ฝฎไบ†้ป˜่ฎค GPIO ้…็ฝฎใ€‚QUP v3 ้€š็”จ้ฉฑๅŠจ็จ‹ๅบไผšๆ นๆฎไธฒ่กŒๅผ•ๆ“ŽไธญๅŠ ่ฝฝ็š„ๅ่ฎฎ้€‰ๅ– GPIO ้…็ฝฎใ€‚ๆ–‡ไปถ่ทฏๅพ„๏ผš
ๅฏไปฅๆŒ‰ๅฆ‚ไธ‹ๆ–นๅผ่ฆ†็›–้ป˜่ฎค GPIO ้…็ฝฎใ€‚
TLMM_MAP ๆ˜ฏ็”จไบŽๅˆๅง‹ๅŒ–ๆดปๅŠจๅ’Œ็ก็œ ็Šถๆ€ GPIO ้…็ฝฎ็š„ๅฎใ€‚ไพ‹ๅฆ‚๏ผŒTLMM_MAP ๅฎ็š„็คบไพ‹็”จๆณ•ใ€‚

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ใ€‚ๆ–‡ไปถ่ทฏๅพ„๏ผš
QUPAC ่ฎฟ้—ฎๆŽงๅˆถ๏ผšๆŽงๅˆถๆฅ่‡ช Qualcomm TEE ๅญ็ณป็ปŸ็š„ๅ›บไปถๅŠ ่ฝฝๅ’Œ่ฎฟ้—ฎๆŽงๅˆถๆƒ้™๏ผŒๅœจไปฅไธ‹ QUPAC ่ฎฟ้—ฎๆ–‡ไปถไธญ้…็ฝฎ๏ผš

้…็ฝฎ I2C ๆŽฅๅฃ

ๆœฌ่Š‚ๆไพ›ๆœ‰ๅ…ณ I2C ่ฝฏไปถ้ฉฑๅŠจ็จ‹ๅบๅ†…ๆ ธ้…็ฝฎๅ’Œ่ฎพๅค‡ๆ ‘่Š‚็‚นๆ›ดๆ”น็š„ไฟกๆฏใ€‚

Linux

ๆ”ฏๆŒ I2C ๆŽฅๅฃ้œ€่ฆไปฅไธ‹้ฉฑๅŠจ็จ‹ๅบๅ†…ๆ ธ้…็ฝฎใ€‚ ้œ€่ฆๅฏ็”จไปฅไธ‹ๅ†…ๆ ธ้…็ฝฎใ€‚
  • CONFIG_QCOM_GENI_SE=y
  • CONFIG_I2C_CHARDEV=m
  • CONFIG_I2C_QCOM_GENI=m๏ผŒ็”จไบŽ้…็ฝฎ็”จๆˆท็ฉบ้—ดๅบ”็”จ็จ‹ๅบ
  • CONFIG_QCOM_GPI_DMA=m๏ผŒ็”จไบŽๅฏ็”จ GSI ๆ”ฏๆŒ
่ฆๅฏ็”จ I2C DT ่Š‚็‚นไปฅ่ฟ›่กŒ้ชŒ่ฏ๏ผŒ่ฏทๅฐ†ไปฅไธ‹่กฅไธๅบ”็”จๅˆฐ /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ใ€‚ ่ฆไบคๅ‰็ผ–่ฏ‘ๅทฅๅ…ท๏ผŒ่ฏทๆ‰ง่กŒไปฅไธ‹ๆ“ไฝœใ€‚
  1. ไปŽ https://cdn.kernel.org/pub/software/utils/i2c-tools/i2c-tools-4.3.tar.gz ไธ‹่ฝฝ i2c-toolใ€‚
  2. ไปŽไธ‹่ฝฝ็š„ tar ๆ–‡ไปถไธญๆๅ–ๅทฅๅ…ทใ€‚
  3. ๅฐ†ๅฝ“ๅ‰็›ฎๅฝ•ๅˆ‡ๆขๅˆฐ i2c-tool ่ทฏๅพ„ใ€‚
  4. ๅฎ‰่ฃ…ๅทฅๅ…ทใ€‚
  5. ่ฎพ็ฝฎไบคๅ‰็ผ–่ฏ‘็Žฏๅขƒใ€‚
  6. ็ผ–่ฏ‘ๅทฅๅ…ทใ€‚
    ไบŒ่ฟ›ๅˆถๆ–‡ไปถ็”ŸๆˆไบŽ <i2c-tool-path>/tools/ใ€‚
้€š่ฟ‡ๅœจ SSH shell ไธญๆฃ€ๆŸฅ dev ่Š‚็‚น๏ผˆ/dev/i2c-0 ๅ’Œ /dev/i2c-1๏ผ‰ๆฅ้ชŒ่ฏ้ฉฑๅŠจ็จ‹ๅบ๏ผŒๆˆ–ไฝฟ็”จ ADB shellใ€‚ๆœ‰ๅ…ณๅฆ‚ไฝ•่ฟ่กŒ SSH ็š„ๆ›ดๅคšไฟกๆฏ๏ผŒ่ฏทๅ‚้˜… Use SSH ้ƒจๅˆ†ใ€‚ ้ชŒ่ฏ I2C ้ฉฑๅŠจ็จ‹ๅบ
  1. ่ฆ้ชŒ่ฏ I2C ้ฉฑๅŠจ็จ‹ๅบ๏ผŒ่ฏทๆ‰ง่กŒไปฅไธ‹ๆ“ไฝœ๏ผš
    1. ๅœจ permissive ๆจกๅผไธ‹ๆ‰“ๅผ€ SSH shell๏ผŒๆˆ–ไฝฟ็”จ ADB shellใ€‚
    2. ๆŒ‚่ฝฝๆ–‡ไปถ็ณป็ปŸใ€‚
    3. ไฝฟ็”จ SCP ๆˆ–็ฑปไผผๅทฅๅ…ทไผ ่พ“ๆ–‡ไปถใ€‚ ไพ‹ๅฆ‚๏ผŒscp i2cdetect root@10.92.162.185:/bin
    4. ๅˆ†้…ๆ‰ง่กŒๆƒ้™ใ€‚
  2. ไฝฟ็”จ i2cdetect ๅทฅๅ…ท้ชŒ่ฏ I2C ่ฎพๅค‡ใ€‚ไพ‹ๅฆ‚๏ผŒ./i2cdetect -y -r <i2c_instance_num>ใ€‚
    ๅฐ†ๆ˜พ็คบไปฅไธ‹่พ“ๅ‡บใ€‚
ๆŸฅ็œ‹ I2C detect ๅธฎๅŠฉ ๆœ‰ๅ…ณ I2C ๆฃ€ๆต‹ๅŠๅ…ถไฝฟ็”จๆ–นๆณ•็š„ๆ›ดๅคšไฟกๆฏ๏ผŒ่ฏท่ฟ่กŒไปฅไธ‹ๅ‘ฝไปคใ€‚
ๅฐ†ๆ˜พ็คบไปฅไธ‹่พ“ๅ‡บใ€‚
่ฏ†ๅˆซ DUT ไธญๅทฒๆŽขๆต‹็š„่ฎพๅค‡ ่ฆ่ฏ†ๅˆซไปŽ DUT ๆŽขๆต‹ๅˆฐ็š„่ฎพๅค‡๏ผŒ่ฏท่ฟ่กŒไปฅไธ‹ๅ‘ฝไปคใ€‚
่พ“ๅ‡บ๏ผš
ไปŽ่ฎพๅค‡่ฏปๅ– I2C ๆ•ฐๆฎ ่ฆไปŽ่ฎพๅค‡่ฏปๅ– I2C ๆ•ฐๆฎ๏ผŒ่ฏท่ฟ่กŒไปฅไธ‹ๅ‘ฝไปคใ€‚
่พ“ๅ‡บ๏ผš

่ฐƒ่ฏ• I2C ้—ฎ้ข˜

ๆœฌ่Š‚ไป‹็ป I2C ่ฝฏไปถ้ฉฑๅŠจ็จ‹ๅบ็š„้ป˜่ฎคๆ—ฅๅฟ—่ฎฐๅฝ•ๆ–นๆณ•๏ผŒ็”จไบŽๅฏ็”จ I2C ไผ ่พ“ๅคฑ่ดฅ็š„ๆ—ฅๅฟ—่ฎฐๅฝ•ใ€‚

Linux

I2C ้ฉฑๅŠจ็จ‹ๅบๆ—ฅๅฟ—้€š่ฟ‡ๅ†…ๆ ธๅŠจๆ€่ฐƒ่ฏ•ๆ–นๆณ•ๅฏ็”จใ€‚ๅœจไปฅไธ‹ๆ–‡ไปถไธญๅฏ็”จ CONFIG_DYNAMIC_DEBUG ไปฅๆ”ฏๆŒๅ†…ๆ ธ้ฉฑๅŠจ็จ‹ๅบ็š„ๅŠจๆ€่ฐƒ่ฏ•ใ€‚
่ฆๅœจๅ†…ๆ ธๆ—ฅๅฟ—๏ผˆdmesg๏ผ‰ไธญๅฏ็”จๅนถๆŸฅ็œ‹ I2C ้ฉฑๅŠจ็จ‹ๅบๆ—ฅๅฟ—๏ผŒ่ฏท่ฟ่กŒไปฅไธ‹ๅ‘ฝไปคใ€‚
่ฆ่ฐƒ่ฏ•้ฉฑๅŠจ็จ‹ๅบๅ่ฎฎๅŠ ่ฝฝๅคฑ่ดฅ็š„้”™่ฏฏๆถˆๆฏ๏ผš[ 8.583248] geni_i2c a94000.i2c: Invalid proto 1๏ผŒ่ฏทๆ‰ง่กŒไปฅไธ‹ๆ“ไฝœใ€‚
  1. ่ฏ†ๅˆซๆฟ็ฑปๅž‹ใ€‚ ็คบไพ‹๏ผšQUPV3_1_SE5 ๆฟ็ฑปๅž‹่ฏฆ็ป†ไฟกๆฏ
  2. ไปŽๅ†…ๆ ธๆ—ฅๅฟ—ไธญ๏ผŒๅœจไปฅไธ‹ไฝ็ฝฎๆ‰พๅˆฐๅนณๅฐ ID ๅ’Œๅญ็ฑปๅž‹็›ธๅ…ณ่ฏฆ็ป†ไฟกๆฏ๏ผš
  3. ่Žทๅ– Qualcomm TEE QUPAC_Access.c ๆ–‡ไปถ็š„้…็ฝฎใ€‚
  4. ่ฏ†ๅˆซ็‰นๅฎšไบŽ่ฏฅไธฒ่กŒๅผ•ๆ“Ž็š„้…็ฝฎใ€‚
  5. ๅœจ QUPAC_Access.xml ๆ–‡ไปถไธญๆ‰พๅˆฐๅนณๅฐ ID ็ฑปๅž‹ใ€‚
  6. ๅฐ†ๆญคๅนณๅฐ ID ็ฑปๅž‹ๆ˜ ๅฐ„ๅˆฐ QUPAC_Access.c ๆ–‡ไปถไธญ็›ธๅบ”็š„ qupv3_perms ็ป“ๆž„ใ€‚
  7. ้ชŒ่ฏ QUPAC_Access.c ๆ–‡ไปถไธญ็š„ๅ่ฎฎๅ’Œๆจกๅผ้…็ฝฎใ€‚

I2C ็คบไพ‹

ๆœ‰ๅ…ณไธŠๆธธ่ฎพๅค‡ๆ ‘ๅ‚่€ƒ็š„ไฟกๆฏ๏ผŒ่ฏทๅ‚้˜…ไปฅไธ‹ DTSI ๆ–‡ไปถใ€‚ ๆœ‰ๅ…ณ Qualcomm Linux ็กฌไปถ SoC ็š„่ฎพๅค‡ๆ ‘่Š‚็‚นไฟกๆฏ๏ผŒ่ฏทๅ‚้˜…ไปฅไธ‹ DTSI ๆ–‡ไปถใ€‚