I'm trying to receive RAW10 data from a MIPI camera. The camera is configured to send a test pattern. According to the manufacturer, it sends the following 10-bit values (shown as 16-bit with actual data in the 10 high bits):
ffc0, cc80, 9940, 6600, 3300, 0000
Instead, I receive them in memory like this:
expected actual
value value
c0 ff ff ff
80 cc b3 cc
40 99 66 99
00 66 19 66
00 33 0c 33
00 00 00 00
The high 10 bits contain the expected values. But the low 6 bits are not filled with 0 as I expected.
I think I see a pattern, though. i.MX6 takes the high byte, inverts it, and copies the resulting low 6 bits into the low 6 bits of the final value. Unless the high byte is ff or 00, in which case the 6 bits are all set or cleared, respectively,.
Is this the proper functioning of i.MX6? Can someone confirm?
Hi Konstantin
please check sect.40.5.15 RAW10 Data Reception i.MX6DQ Reference Manual
http://cache.freescale.com/files/32bit/doc/ref_manual/IMX6DQRM.pdf
Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
sect.40.5.15 shows how 4 10-bit pixels are packed in 5 bytes of memory. This is NOT what I observe. I observe that every 10-bit pixel takes 2 bytes of memory. If I simply remove all bytes at offsets 0, 2, 4, 6, ... (that is, remove the 2 least significant RAW10 bits and the 6 bits added by i.MX6) I get the same picture as I get in RAW8 mode where every pixel takes 1 byte. So, I guess, now we have 2 problems:
1) Who expands RAW10 pixels to 16 bits?
2) How are the added 6 bits generated? (original question)