
ๅพ๏ผSPI ๆฐๆฎๆต
SPI ๆ ธๅฟๆฏๆๅๅ SPI ๆ ๅใ็นๅฏน็นไปฅๅๆงๅถๅจ-็ฎๆ ๅ่ฎฎใSPI ๆ ธๅฟไฝฟ็จๅๆก็้็บฟ๏ผSPI_CS#_N๏ผๆฅ้ๆฉ่ฆ้ไฟก็็ฎๆ ่ฎพๅคใไปฅไธไธคๆกๆฐๆฎ็บฟๆฏๆๅๅๆฐๆฎไผ ่พใ- SPI_DATA_MO_SI๏ผๆงๅถๅจๆฐๆฎ่พๅบ๏ผ็ฎๆ ๆฐๆฎ่พๅ ฅใ
- SPI_DATA_MI_SO๏ผๆงๅถๅจๆฐๆฎ่พๅ ฅ๏ผ็ฎๆ ๆฐๆฎ่พๅบใ
| ๆฐๆฎไฟกๅท | MOSI๏ผๆงๅถๅจๆฐๆฎ่พๅบ๏ผ็ฎๆ ๆฐๆฎ่พๅ ฅใ |
| MISO๏ผๆงๅถๅจๆฐๆฎ่พๅ ฅ๏ผ็ฎๆ ๆฐๆฎ่พๅบใ | |
| ๆงๅถไฟกๅท | SCLK๏ผ็ฑๆงๅถๅจ็ๆๅนถ่พๅ ฅๅฐๆๆ็ฎๆ ็ๆถ้ใ |
| CS๏ผ็้๏ผๅฝๆงๅถๅจ็ฝฎไฝๅ ถ CS_N ไฟกๅทๆถ๏ผ็ฎๆ ่ขซ้ไธญใ |
SPI ็นๆง
ๆฌ่ไป็ป SPI ไธฒ่กๅผๆไผ ่พๆจกๅผไปฅๅๆฏ็งๆจกๅผ็ไธๅไฝฟ็จๅบๆฏใๆฌ่่ฟไป็ปๅจๅไธชๅญ็ณป็ป SPI ้ฉฑๅจ็จๅบไธญๅฏ็จ็ FIFO ๅ DMAใ ่กจ๏ผ SPI ไผ ่พๆจกๅผ| ๅญ็ณป็ป | ไผ ่พๆจกๅผ | ่ฏดๆ |
|---|---|---|
| Linux |
| ๆฏๆ็ๆๅคง้ ็ฝฎ้ๅบฆไธบ 50 MHzใ |
| Boot | FIFO |
|
| aDSP |
|
|
SPI ๆฅๅฃ็ปไปถ
ๆฌ่ๆไพๆๅ ณๅญ็ณป็ป้ฉฑๅจ็จๅบใๅ ๆ ธ่ฎพๅคๆ ่็นๅ็ธๅ ณๆๆกฃ็ไฟกๆฏใ ่กจ๏ผ SPI ๆฅๅฃ๏ผLinux ่กจ๏ผ SPI ๆฅๅฃ๏ผBoot| ๆไปถ็ฑปๅ | ่ฏดๆ |
|---|---|
| QUP v3 ไธฒ่กๅผๆ้ ็ฝฎ |
|
| Qualcomm TEE ่ฎพ็ฝฎ |
|
| ๆไปถ็ฑปๅ | ่ฏดๆ |
|---|---|
| QUP v3 ไธฒ่กๅผๆ้ ็ฝฎ |
|
| ๅบไปถ้ ็ฝฎ่ฎพ็ฝฎ |
|
| ๆไปถ็ฑปๅ | ่ฏดๆ |
|---|---|
| QUP v3 ไธฒ่กๅผๆ้ ็ฝฎ |
|
| Qualcomm TEE ่ฎพ็ฝฎ |
|
SPI API
ๆฌ่ๅๅบไบไปฅไธๅญ็ณป็ป็ SPI APIใ- Linux๏ผ
- Boot๏ผboot_images/boot/QcomPkg/Include/SpiApi.h
- aDSP/SDC๏ผadsp_proc/core/api/buses/spi_api.h
SPI ่ฝฏไปถ่ฎพๅคๆ ้ ็ฝฎ
ๆฌ่ๆไพๆๅ ณ SPI ่ฎพๅคๆ ้ ็ฝฎไปฅๅ่ฎพๅค่็นๆๆกฃ็ไฟกๆฏใLinux
ๆๅ ณ่ฎพๅค SPI ็่ฏฆ็ปไฟกๆฏ๏ผ่ฏทๅ้ ไปฅไธ DTSI ๆไปถใ- QCS6490 ๅ QCS5430๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/kodiak.dtsi
- Dragonwing IQ-9075๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/lemans.dtsi
- Dragonwing IQ-615๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/talos.dtsi
pinctrl ้
็ฝฎ็ๅ
ๆ ธๆๆกฃ๏ผ่ฏทๅ้
ไปฅไธๆไปถใ
- QCS6490 ๅ QCS5430๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/kodiak.dtsi
- Dragonwing IQ-9075๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/lemans.dtsi
- Dragonwing IQ-615๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/talos.dtsi
Documentation/devicetree/bindings/pinctrl/qcom,<chipset>-tlmm.yaml
pinctrl.dtsi ไธญๅนถๅทฒๅฎๆๆ ๅฐใ
ไพๅฆ๏ผ
/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 ๆไปถไธญไฝฟ็จ SPI ๅ่ฎฎใๅฆๆ้่ฆ๏ผ่ฏทไฟฎๆนๆ้็่ฎพ็ฝฎ๏ผๆๆฅ็ไธบ QUP v3 ไธฒ่กๅผๆๅฎไพๅ้
็้ป่ฎค่ฎพ็ฝฎใ
ไปฅไธๆฏๅฏ็จ SPI ็็คบไพ้
็ฝฎใ
Boot
ๆ นๆฎ Qualcomm Linux ่ฏ็ไบงๅ่ฆๆฑ๏ผๅจ/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 ๆไปถไธญ้
็ฝฎ QUP v3 ่ฎพ็ฝฎใ
ๆณจๆ่ฆๅฏ็จๆ้็ QUP v3 ไธฒ่กๅผๆ๏ผ่ฏทๅฐ QUP v3 ๅ
่ฃ
ๅจ๏ผwrapper๏ผ่็น็ถๆๆดๆฐไธบ
okay๏ผๅนถๅฐ็ธๅบ็ไธฒ่กๅผๆ่็นๆดๆฐไธบ disabled ็ถๆใpinctrl ๅฎไน๏ผ่ฏทๅ้
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ใ
็คบไพ GPIO ้
็ฝฎ๏ผ
- ๅฝ้ๆฑไธ้ป่ฎค้
็ฝฎไธๅๆถ๏ผๅจ
<chipset>-qupv3-pinctrl.dtsiไธญไฝฟ็จ GPIO ้ ็ฝฎไฟฎๆน่ฏฅๅฎใ - ๆๅ
ณๅฎๅฎไน๏ผ่ฏทๅ้
ๅคดๆไปถ่ทฏๅพ
Settings/Include/gpio-dt.hใ
ๆณจๆๅจๆดๆน็ปไธๅฏๆฉๅฑๅบไปถๆฅๅฃ๏ผUEFI๏ผ้
็ฝฎไนๅ๏ผ่ฏท้ช่ฏ Qualcomm TEE ่ฎพ็ฝฎใ็กฎไฟไธฒ่กๅผๆ่็นๅคไบ FIFO_MODE ไธๅฏไปๅบ็จๅค็ๅจ่ฎฟ้ฎใ้ช่ฏๅ ่ฝฝ็ๅ่ฎฎๆฏๅฆ็ฌฆๅ่ฆๆฑใ
aDSP/SDC
ๅบไปถๅจ aDSP ๅญ็ณป็ป็ๅฏๅจๅบๅๆ้ดๅ ่ฝฝ SSC QUPใ้ ็ฝฎๆไปถไฝไบ aDSP ๆๅปบไธญ็/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ใ
ไปฅไธ้
็ฝฎๆฏๅ ่ฝฝไบ SPI ๅบไปถ็ SSC QUP SE4 ็็คบไพใ
/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_instance_mapping.cใ
ๅฏไปฅๆๅฆไธๆนๅผ่ฆ็้ป่ฎค GPIO ้
็ฝฎใ
Qualcomm TEE
QUP v3 ่ฎฟ้ฎ้ ็ฝฎ่ฎพ็ฝฎไฝไบ/firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/TZ.XF.5.0/trustzone_images/core/settings/buses/spi/qupv3/interface/spi_devcfg.hใ
่ฆๅจ /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/TZ.XF.5.0/trustzone_images/core/settings/buses/spi/qupv3/config/<chipset>/tz/spi_devcfg_user.h ไธญไธบ SPI ๅฏ็จ QUP v3 ไธฒ่กๅผๆ๏ผ่ฏทๆๅฆไธๆนๅผๆทปๅ #define TZ_USE_SPI_X๏ผX ไธบ SPI ไธฒ่กๅผๆ็ผๅท๏ผใ
TZ_USE_SPI_<num> ็็ผๅทๅบไบไธฒ่กๅผๆ็ๅบๅท๏ผไปไธๅผๅง๏ผใไพๅฆ๏ผๅฆๆๆไธคไธช QUP๏ผQUPV3_0 ๆไธไธชไธฒ่กๅผๆ๏ผQUPV3_1 ๆๅ
ซไธชไธฒ่กๅผๆ๏ผๅ็จๆทๅฟ
้กปๅฏ็จ QUPV3_2_SE2ใๅฎๅบไธบ TZ_USE_SPI_9ใ
GPIO ้
็ฝฎ๏ผๅจไปฅไธ็คบไพไธญ๏ผ้ฉฑๅจๅผบๅบฆๅไธไธๆๆ นๆฎไป MISO ๅผๅง็ PIN ็ดขๅผ่ฟ่ก้
็ฝฎ๏ผไฝไบ settings/buses/spi/qupv3/config/<chipset>/tz/spi_devcfg_user.cใ
/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ใ
SPI ๅฏๅจ่ฐ่ฏ๏ผbringup๏ผ
ๆฌ่ไป็ปๅฆไฝๅฏ็จ Qualcomm Linux SPI ้ฉฑๅจ็จๅบใLinux
่ฆ้ช่ฏไธ่ฎพๅค็ SPI ้ไฟก๏ผๅฟ ้กปๅฏ็จๅ ๆ ธ้ ็ฝฎใCONFIG_SPI_SPIDEV=m ่ฎพ็ฝฎๅทฒๅจ็ธๅบ็ <chipset> defconfig ๆไปถไธญๅฏ็จใๅจๅ
ๆ ธ่ฎพๅคๆ ไธญๅฏ็จ็นๅฎ็ QUP v3 SPI ไธฒ่กๅผๆๅฎไพใ
SPI ้ ็ฝฎ
ๆฌ่ๆไพๆๅ ณ SPI ่ฝฏไปถ้ฉฑๅจๅ ๆ ธ้ ็ฝฎๅ่ฎพๅคๆ ่็นๆดๆน็ไฟกๆฏใLinux
ๆฏๆ SPI ๆฅๅฃ้่ฆไปฅไธ้ฉฑๅจๅ ๆ ธ้ ็ฝฎใ- ้ฉฑๅจๆบๆไปถ๏ผhttps://github.com/torvalds/linux/blob/master/drivers/spi/spi-geni-qcom.c
- ๅ
ๆ ธ
defconfigๆไปถ๏ผ<workspace_path_of_LINUX_kernel_image>/sources/kernel/kernel_platform/kernel/arch/arm64/configs/qcom_defconfig
CONFIG_QCOM_GENI_SE=yCONFIG_SPI_QCOM_GENI=mCONFIG_SPI_SPIDEV=m็จไบ้ ็ฝฎ็จๆท็ฉบ้ดๅบ็จ็จๅบCONFIG_QCOM_GPI_DMA=m็จไบๅฏ็จ GSI ๆฏๆ
/arch/arm64/boot/dts/qcom/<chipset>.dtsi ๆไปถใ
ๆณจๆๆจๅบๅฝ็ผ่ฏๅ
ๆ ธ้
็ฝฎๅ่ฎพๅคๆ ๆดๆนใๅ
ๆ ธ็ผ่ฏๅฎๆๅ๏ผๅฏไปฅๅฐ้ๅๅ ่ฝฝๅฐ่ฎพๅคไธไปฅ้ช่ฏๆฅๅฃใๆๅ
ณๆฅๅฃ้ช่ฏ็ไฟกๆฏ๏ผ่ฏทๅ้
SPI ้ช่ฏ้จๅใ
SPI ้ช่ฏ
ๆฌ่ไป็ป SPI ้ฉฑๅจ็จๅบ็้ช่ฏ่ฟ็จๅๆต่ฏ็ปๆใLinux
่ฆไบคๅ็ผ่ฏ SPI ๅทฅๅ ท๏ผ่ฏทๆง่กไปฅไธๆไฝใ- ไป
yocto/build-qcom-wayland/tmp-glibc/work-shared/<chipset>/kernel-source/tools/spi่ทๅ SPI ๅทฅๅ ทใๆๅ ณ SPI ๅทฅๅ ท็ๆดๅค่ฏฆ็ปไฟกๆฏ๏ผ่ฏทๅ้ https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/tools/spiใ - ๅฎ่ฃ
ไบคๅ็ผ่ฏๅจใ
- ่ฟ่กไปฅไธๅฝไปค่ฎพ็ฝฎไบคๅ็ผ่ฏ็ฏๅขใ
- ่ฟ่กไปฅไธๅฝไปค็ผ่ฏ่ฏฅๅทฅๅ
ทใ
้ช่ฏ SPI ่ฎพๅค
้่ฟๅจ SSH shell ไธญๆฃๆฅdev ่็น๏ผ/dev/spidev1.0๏ผๆไฝฟ็จ ADB shell ๆฅ้ช่ฏ้ฉฑๅจ็จๅบใๆๅ
ณๅฆไฝ่ฟ่ก SSH ็ๆดๅคไฟกๆฏ๏ผ่ฏทๅ้
Use SSH ้จๅใ
- ่ฆ้ช่ฏ SPI ้ฉฑๅจ็จๅบ๏ผ่ฏทๆง่กไปฅไธๆไฝ๏ผ
- ไปฅๅฎฝๅฎน๏ผpermissive๏ผๆจกๅผๆๅผ SSH shell๏ผๆไฝฟ็จ ADB shellใ
- ๆ่ฝฝๆไปถ็ณป็ปใ
- ไฝฟ็จ SCP ๆ็ฑปไผผๅทฅๅ
ทไผ ่พๆไปถใ
ไพๅฆ๏ผ
scp spidev_test root@10.92.175.138:/binใ - ่ตไบๆง่กๆ้ใ
- ้ช่ฏ SPI ่ฎพๅคใๅฝไปคๆ ผๅผไธบ
./spidev_test -D /dev/<spidev_node>ใๅฐๆพ็คบไปฅไธ่พๅบใ
SPI ่ฐ่ฏ
ๆฌ่ไป็ป SPI ่ฝฏไปถ้ฉฑๅจ็้ป่ฎคๆฅๅฟ่ฎฐๅฝๆนๆณ๏ผไปฅๅฏ็จๅฏน SPI ไผ ่พๅคฑ่ดฅ็ๆฅๅฟ่ฎฐๅฝใLinux
SPI ้ฉฑๅจๆฅๅฟ้่ฟๅจๆ่ฐ่ฏๆนๆณๅฏ็จใๅจ<workspace_path_of_LINUX_kernel_image>/sources/kernel/kernel_platform/kernel/arch/arm64/configs/qcom_defconfig ไธญๅฏ็จ CONFIG_DYNAMIC_DEBUG ไปฅๆฏๆๅ
ๆ ธ้ฉฑๅจ็ๅจๆ่ฐ่ฏใ
่ฆๅจๅ
ๆ ธๆฅๅฟ๏ผdmesg๏ผไธญๅฏ็จๅนถๆฅ็ SPI ้ฉฑๅจๆฅๅฟ๏ผ่ฏท่ฟ่กไปฅไธๅฝไปคใ
SPI ็คบไพ
ๆๅ ณไธๆธธ่ฎพๅคๆ ๅ่็ไฟกๆฏ๏ผ่ฏทๅ้ ไปฅไธ DTSI ๆไปถใ- QCS6490 ๅ QCS5430๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/kodiak.dtsi
- Dragonwing IQ-9075๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/lemans.dtsi
- Dragonwing IQ-615๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/talos.dtsi
- QCS6490 ๅ QCS5430๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts
- Dragonwing IQ-9075๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/lemans.dtsi
- Dragonwing IQ-615๏ผhttps://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/talos.dtsi

