簡體   English   中英

Android Things - I2C2 已在使用中(代碼 16)

[英]Android Things - I2C2 is already in use (code 16)

我正在嘗試將 ADS1015 ADC 與我的 Pico Pro Maker 連接。 不幸的是,我遇到了以下錯誤:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.cililing.harvbox.thingsapp, PID: 1855
    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:448)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
     Caused by: com.google.android.things.pio.PioException: android.os.ServiceSpecificException: I2C2 is already in use (code 16)
        at com.google.android.things.pio.I2cDeviceImpl.<init>(I2cDeviceImpl.java:43)
        at com.google.android.things.pio.PeripheralManager.openI2cDevice(PeripheralManager.java:246)
        at com.google.android.things.contrib.driver.adc.ads1xxx.Ads1xxx.<init>(Ads1xxx.java:200)
        at com.google.android.things.contrib.driver.adc.ads1xxx.Ads1xxx.<init>(Ads1xxx.java:187)
        at com.cililing.harvbox.thingsapp.thingscontroller.controllers.ADS1015ControllerImpl.<init>(ADS1015Controller.kt:12)
        at com.cililing.harvbox.thingsapp.ui.MainActivity$i2CController$2.invoke(MainActivity.kt:40)
        at com.cililing.harvbox.thingsapp.ui.MainActivity$i2CController$2.invoke(MainActivity.kt:33)
        at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
        at com.cililing.harvbox.thingsapp.ui.MainActivity.getI2CController(Unknown Source:25)
        at com.cililing.harvbox.thingsapp.ui.MainActivity.access$getI2CController$p(MainActivity.kt:33)
        at com.cililing.harvbox.thingsapp.ui.MainActivity$i2cLogger$1.run(MainActivity.kt:47)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
     Caused by: android.os.ServiceSpecificException: I2C2 is already in use (code 16)
        at android.os.Parcel.readException(Parcel.java:2027)
        at android.os.Parcel.readException(Parcel.java:1959)
        at com.google.android.things.pio.IPeripheralManagerClient$Stub$Proxy.OpenI2cDevice(IPeripheralManagerClient.java:1243)
        at com.google.android.things.pio.I2cDeviceImpl.<init>(I2cDeviceImpl.java:41)
        at com.google.android.things.pio.PeripheralManager.openI2cDevice(PeripheralManager.java:246) 
        at com.google.android.things.contrib.driver.adc.ads1xxx.Ads1xxx.<init>(Ads1xxx.java:200) 
        at com.google.android.things.contrib.driver.adc.ads1xxx.Ads1xxx.<init>(Ads1xxx.java:187) 
        at com.cililing.harvbox.thingsapp.thingscontroller.controllers.ADS1015ControllerImpl.<init>(ADS1015Controller.kt:12) 
        at com.cililing.harvbox.thingsapp.ui.MainActivity$i2CController$2.invoke(MainActivity.kt:40) 
        at com.cililing.harvbox.thingsapp.ui.MainActivity$i2CController$2.invoke(MainActivity.kt:33) 
        at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) 
        at com.cililing.harvbox.thingsapp.ui.MainActivity.getI2CController(Unknown Source:25) 
        at com.cililing.harvbox.thingsapp.ui.MainActivity.access$getI2CController$p(MainActivity.kt:33) 
        at com.cililing.harvbox.thingsapp.ui.MainActivity$i2cLogger$1.run(MainActivity.kt:47) 
        at android.os.Handler.handleCallback(Handler.java:790) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

我正在使用以下驅動程序: https : //github.com/androidthings/contrib-drivers/tree/master/adc

我已經做了什么:

  • 卸載所有應用
  • 重新安裝整個 AndroidThings
  • 我累了,I2C1 和 I2C2
  • 嘗試讀取新應用程序的值(僅來自庫的示例)。

我不知道我還能做些什么。 我很確定設備已正確連接(scl-scl、sda-sda、addr-gnd、a0-other_analog_output)到主板,錯誤實際上有點奇怪,因為我確信沒有其他應用程序使用這些引腳。

負責連接外設的代碼:

class ADS1015ControllerImpl(val i2cName: String,
                            val range: Int) : ADS1015Controller {

    private val instance: Ads1xxx = Ads1xxx(i2cName, Ads1xxx.Configuration.ADS1015)
    init {
        instance.inputRange = range
    }

    override fun read(channel: Int, logger: (Int) -> Unit) {
        logger.invoke(
                instance.readSingleEndedInput(channel)
        )
    }

    override fun release() {
        instance.close()
    }
}

錯誤消息I2C2 is already in use (code 16)意味着您嘗試打開一個至同一I2C總線的多個連接,而沒有關閉前一個實例。 打開I2C連接的代碼位於Ads1xxx構造函數中。 您必須在代碼中管理該類的單個實例,或者確定在初始化另一個Ads1xxx之前對當前Ads1xxx調用close()

基於堆棧跟蹤,它看上去也像是在第一次訪問它的值時由延遲加載初始化了該設備,因此有可能在您期望的時間點未調用此構造函數,從而導致事務混亂。

事實上,問題是插頭焊接不良。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM