Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
code:code [2024/04/01 04:07] – [Preface] Igor Yefmov | code:code [2024/04/02 08:41] – Igor Yefmov | ||
---|---|---|---|
Line 2: | Line 2: | ||
Controlling the camera is done via writing " | Controlling the camera is done via writing " | ||
- | - standard UVC - this one is automagically supported by any UVC 1.1 compliant OS, which in the year 2017 would be "any modern OS". This interface covers the universally standardized controls for [[https:// | + | - [[https:// |
- | | + | |
- [[fx3_api|FX3 Host Vendor Command Interface]] - this interfaces with the Cypress' | - [[fx3_api|FX3 Host Vendor Command Interface]] - this interfaces with the Cypress' | ||
- [[fpga_registers_map|FPGA I²C Access]] - a " | - [[fpga_registers_map|FPGA I²C Access]] - a " | ||
+ | - (Gen 3 and Gen 4) direct I²C access via Cypress' | ||
If you are set on writing your own UI and don't want to be bothered too much with figuring out how to communicate with the camera you have an option of using the [[code: | If you are set on writing your own UI and don't want to be bothered too much with figuring out how to communicate with the camera you have an option of using the [[code: | ||
Line 149: | Line 149: | ||
---- | ---- | ||
- | ====== Firmware Versioning evolution ====== | + | Previous iterations had different bit layout for the Version Info, see details here: [[Firmware Versioning Evolution]] |
- | + | ---- | |
- | ====== FX3 Version Info ====== | + | |
- | The version id is also encoded into the firmware image file name as: | + | |
- | < | + | |
- | + | ||
- | ===== FX3 version info C/C++-struct ===== | + | |
- | The FX3 version structure is as follows (little-endian memory layout): | + | |
- | + | ||
- | <code cpp firmware-version.h> | + | |
- | struct FwVersion{ | + | |
- | unsigned vendorId | + | |
- | unsigned hwCfgId | + | |
- | unsigned productId | + | |
- | #ifdef OLD_VER_FMT | + | |
- | unsigned releaseType : 5; | + | |
- | unsigned buildNo | + | |
- | #else | + | |
- | unsigned releaseType : 3; | + | |
- | unsigned buildNo | + | |
- | #endif | + | |
- | }; | + | |
- | static_assert(sizeof(FwVersion) == 4); | + | |
- | </ | + | |
- | + | ||
- | Prior to FPGA v. 89 there was no standard-compliant way of representing the version info in a C struct though (which is exactly what prompted the rework in the first place). | + | |
- | ==== Bit layout ==== | + | |
- | The bits are laid out in 4 sequential bytes as follows (depending on the version): | + | |
- | ^ version | + | |
- | ^ ::: ^ 7 ^ 6 ^ 5 ^ 4 ^ 3 ^ 2 ^ 1 ^ 0 ^ 7 ^ 6 ^ 5 ^ 4 ^ 3 ^ 2 ^ 1 ^ 0 ^ 7 ^ 6 ^ 5 ^ 4 ^ 3 ^ 2 ^ 1 ^ 0 ^ 7 ^ 6 ^ 5 ^ 4 ^ 3 ^ 2 ^ 1 ^ 0 ^ | + | |
- | | fx3< | + | |
- | | fx3< | + | |
- | | fx3> | + | |
- | + | ||
- | Because of the change in bit layout different byte sequences shown below are needed to produce the same result (exact same component values for the sake of simplicity and only as an illustration): | + | |
- | ^ version | + | |
- | .vendorId = 1 | + | |
- | .hwCfgId = 1 | + | |
- | .productId = 5 | + | |
- | .releaseType = 3 | + | |
- | .buildNo = 0x67</ | + | |
- | | fx3> | + | |
- | | fx3< | + | |
- | | fx3> | + | |
===== Vendor ID ===== | ===== Vendor ID ===== | ||
^Code ^Value ^ | ^Code ^Value ^ |