Переглянути джерело

i2c - allow slave stretching SCL (just loop and check) (#1589)

zelll 7 роки тому
батько
коміт
798759950f
1 змінених файлів з 7 додано та 0 видалено
  1. 7 0
      app/driver/i2c_master.c

+ 7 - 0
app/driver/i2c_master.c

@@ -33,6 +33,8 @@ LOCAL uint8 pinSCL = 15;
 LOCAL void ICACHE_FLASH_ATTR
 i2c_master_setDC(uint8 SDA, uint8 SCL)
 {
+    uint8 sclLevel;
+
     SDA	&= 0x01;
     SCL	&= 0x01;
     m_nLastSDA = SDA;
@@ -47,6 +49,11 @@ i2c_master_setDC(uint8 SDA, uint8 SCL)
     } else {
         I2C_MASTER_SDA_HIGH_SCL_HIGH();
     }
+    if(1 == SCL) {
+        do {
+            sclLevel = GPIO_INPUT_GET(GPIO_ID_PIN(I2C_MASTER_SCL_GPIO));
+        } while(sclLevel == 0);
+    }
 }
 
 /******************************************************************************