Bypass Mode Feature#
Overview#
Purpose#
The Bypass Mode feature enables direct camera data streaming through the deserializer without the usual initialization and configuration steps. This feature is particularly useful for scenarios requiring quick camera data access or when normal deserializer initialization is not needed.
Scope#
This design covers:
Implementation of bypass mode in the deserializer
Custom interface for mode control
Platform configuration support
Integration with existing camera module and sensor implementations
Architecture#
Flow Chart#
Note: Example Deserializer is MAX96712.
Key Components#
Deserializer States#
CDI_<Deserializer>_STATE_INIT: Initial state after configurationCDI_<Deserializer>_STATE_RUNNING: Active streaming state
Operation Modes#
<Deserializer>OPMODE_NORMAL: Standard operation with full initialization<Deserializer>OPMODE_BYPASS: Bypass mode with minimal initialization
Detailed Design#
Custom Interface Implementation#
class <Deserializer>DeserializerCustomInterface : public Interface {
public:
static const UUID& getClassInterfaceID();
virtual SIPLStatus SetDeserializerMode(<Deserializer>OpMode const Mode) = 0;
virtual SIPLStatus GetDeserializerMode(<Deserializer>OpMode * const Mode) = 0;
protected:
~<Deserializer>DeserializerCustomInterface() = default;
};
Initialization Flow#
Normal Mode#
Power device initialization
Link initialization
Sensor initialization
CSI configuration
Start sequence
Bypass Mode#
Skip power device initialization
Skip link initialization if in INIT state
Enable replication mode
Set state to RUNNING
Platform Configuration#
The bypass mode is configured in the platform JSON:
{
"deserializer": "<Deserializer>_BYPASS"
}
Runtime Control#
Command Interface#
Command:
bpUsage: Sets the deserializer mode (0 for Normal, 1 for Bypass)
Implementation: Through <Deserializer>DeserializerCustomInterface
Mode Switching#
SIPLStatus CNvM<Deserializer>::SetDeserializerMode(<Deserializer>OpMode const Mode) {
if (Mode <= <Deserializer>OPMODE_INVALID || Mode >= <Deserializer>OPMODE_NUM) {
return NVSIPL_STATUS_BAD_ARGUMENT;
}
m_Mode = Mode;
if (m_Mode == <Deserializer>OPMODE_BYPASS) {
return ConvertNvMediaStatus(<Deserializer>SetSwitchOver(m_upCDIDevice.get(), true));
}
return NVSIPL_STATUS_OK;
}
Power Management#
Power Control in Bypass Mode#
Skip power-off sequence if switchover is needed
Maintain power state during mode transitions
Handle power dependencies appropriately
Limitations and Constraints#
Bypass mode skips certain initialization steps
Limited configuration options in bypass mode
Mode switching may require careful timing consideration
I2C bus signls of External ECU and Tegra are connected to the same I2C port of the Deserializer