خرید بک لینک

Is there a general I2C command to see if a device is still present on the bus after it is initialized once? For example an OLED display. The reason I ask this is to avoid the main program will freeze (when a device is discoected) because of infinite loops present in the library code, in for example, the Wire library.

At startup of the MCU I want to check if a device is available or not and initialized when it is available. I do this with this function and works fine .....

bool MyClass::isPnpDeviceAvailable( uint8_t iAddress, bool bIsInitOnce = false )
{
     // Try to start coection
    Wire.beginTransmission( iAddress );

     // End coection without STOP command if already is initialized
    return ( Wire.endTransmission( !bIsInitOnce ) == 0x00 ); // No Error?, return true
}

.... however, when I want to check if a device is still there, before I perform an update, when I do this:

// 1.
if( isPnpDeviceAvailable( 0x3C, true )) 
 { /* Cause program hang */ }
// 2.
if( isPnpDeviceAvailable( 0x3C )) 
 { /* Cause display to turn off  */ }

Is there a general command available, to say/send just a "Hello, are you there" and wait for a reply without sending START and STOP commands and without interrupting device/bus status?


Here is the proto-type device I made with attached (optional PNP I2C) display.

Device with PNP I2C display

برچسب: نویسنده: استخدام کار تاريخ: دوشنبه 13 شهريور 1396 ساعت: 16:28

صفحه بندی