1.基礎概念
(1) Bus Access Module (BAM),總線訪問模塊
BAM is used to move data to/from the peripheral buffers.
(2) BAM Low-Speed Peripheral (BLSP),低速接口的總線訪問模塊
(3) QUP:Qualcomm Universal Peripheral,高通統一的外設
2.Msm8937 BLSP
BLSP是高通對於低速接口的一種管理方式,8937 平臺含有兩個BLSP(BAM Low-Speed Peripheral) 塊,對應於12個BLSP端口。 每一個BLSP塊含有最多六個Qualcomm Universal Peripheral (QUP)和六個UART cores、其中SPI和IC2核心集成到一個名字爲QUP核心,並且共享同一個FIFO,而UART_DM單獨集成並有自己的FIFO,所有的這3個core共享同一個總線接口,也就是對外共用相同的I/O接口,比如:
但是對於只使用兩個UART引腳的UART_DM,比如只用到GPIO_4(TX)和GPIO_5(RX),也是使用兩個引腳的I2C接口這時也可以同時使用:
通過相關手冊查詢到每個外設屬於BLSP多少。
3. 確認我們使用的I2C對應哪個BLSP和QUP
比如我們採用SDA---GPIO6,SCL---GPIO7,
(1) 到msm8937-pinctrl.dsti確認GPIO6和GPIO7對應設備樹中是哪組I2C
其實從上圖可知道是第1個BLSP的第2個QUDP,但我們從設備樹上找到相關的
(2) 通過i2c_2_active找到msm8937.dtsi下有引用
這裏可知是採用BLSP1的QUP2,I2C核基準地址是0x78b6000
(3) Lk部分確定所用的I2C對應的BLSP和QUP
來看bootable\bootloader\lk\platform\msm_shared\include\blsp_qup.h下的定義
從這裏可以看出QUP是從QUP_ID_0開始,那麼我們的使用的GPIO6和GPIO7的I2C對應QUP_ID_1,使用示例如下:
4. QUP基地址和IRQs
BLSP routes the following interrupts from its subcores:
BAM_IRQ – Indicates that a BAM operation has completed
PERIPHERAL_IRQ – Driven by UART or QUP; shared at the peripheral level for status updates and errors of the peripheral; a status register in the peripheral core allows software to distinguish between interrupt sources
參考:
高通無人機8074 BLSP接口說明
http://huaqianlee.github.io/2016/04/27/Uav/Qualcomm-uav-blsp-port/
高通APQ8074 spi 接口配置
https://blog.csdn.net/jumper511/article/details/25622833