Products > Thermal Imaging

Experimenting with an Infiray Tiny1C core

(1/8) > >>

I've been experimenting with an Infiray Tiny1C core and I thought I'd share at least some of what I've learned in a thread in case anyone is interested.  I say "experimenting" but it's still mostly "learning".

My background is EE/CS and for the last years I've been designing embedded systems for myself and for others.  I have a lot of experience with the Flir Lepton and have designed several products using it.  I'm not a professional thermographer by any means but like a lot of you in this forum am captivated by the idea of being able to see something that we're not normally able too.  I also like the idea of making interesting/useful technology available to people and with the Lepton (and perhaps the Tiny1C) I've developed a set of reasonably low-cost open-source cameras aimed at makers and other technical types to let them experiment at the low end as well.

I reached out to Infiray (IRay Technology Co, Ltd) earlier this year and was able to buy a Tiny1C.  I chose the Tiny1C because it supports either SPI or 8-bit DVP interfaces for the video stream which are compatible with the Espressif ESP32 and ESP32-S3 micro-controllers I want to use.  Like the Lepton it uses I2C for the command interface.  It's a bit more expensive than the Lepton 3.5 (~$250USD qty 1 vs $150) but touts some significantly improved performance including higher resolution (256 x 192 pixels vs. 160 x 120 pixels) and higher framerate (max 25 fps vs. 8.7 fps).  Its claimed thermal sensitivity (< 50 mK), pixel pitch (12µm), range (8-14µm) and raw sensor output (14 bits) are the same.  It also has a built-in shutter for calibration but seems to come with more choices for lens (2-4.3 mm).  It also seems that various models (perhaps various calibration setups and lenses) allow different accuracy over different temperature ranges (for example a unit with higher accuracy over "biologic" temperature ranges 10-50°C or lower accuracy over "industrial" temperature ranges (-10 - 75°C with some inconclusive hints that a low-gain mode can extend that range).

In addition to the camera module I received a USB Interface dev board and zip files with a Windows demo application, some documentation about using the demo application, communicating with the device via the SPI/DVP and I2C interfaces, a spreadsheet listing the commands and their arguments and demo code written for a STM32 dev board.  Unfortunately the USB Interface board was DOA so I couldn't play with their app.  The English documentation seems to be translated from the original Chinese using a computer translator but I appreciate Infiray for making the effort.  It has given me an appreciation for the difficulty other engineers must have had over the decades around the world dealing with English-only documentation.

Subsequent posts will be about various individual topics.  Let me know if this is inappropriate for this forum and I'll stop.   I'm still unclear if I can share the documents and code Infiray sent me.  I signed a sales contract which mostly committed me to paying them but also holds me responsible for obeying various export regulations (including the "Foreign Sanctions Evaders List"?!) and preventing use by Military or anyone whose conduct is for military purposes, as well as protecting confidential information.  I plan to err on the side of caution.

This post describes the camera module a bit.  It's just a bit larger than the Lepton and comes as a PCB assembly with a high-density connector instead of requiring a socket.  It takes 3.3V and 5V inputs.  The 3.3V input powers the digital circuitry (typ 220 mA + 100mA for the shutter closing).  The 5V input powers the analog circuitry in the sensor (typ 5mA) and has a pretty tight spec (200 µV noise up to 50 kHz).

The camera has several interfaces

1. Configurable video output : Either 8-bit DVP or SPI (based on a command).  DVP is used by a lot of traditional video sensors (e.g. the ubiquitous Omnivision OV2640) and includes a CMOS-compatible 8-bit parallel bus, horizontal and vertical sync signals and pixel clock.

2. I2C Command : The camera acts an an I2C slave presenting a register interface (16-bit register addresses) Infiray claims complies with the CCI protocol in MIPI CSI-2 (one has to sign up to get this spec which I haven't yet but I think it addresses a common way to initialize and control image sensors). I'm not sure the fastest supported frequency is.  I use 100 kHz.

3.Serial port : Undocumented but I see what appear to be diagnostic/logging messages coming out of the camera at 115200 baud.

4. Some sort of undocumented programming SPI interface (perhaps to factory load code into the on-board micro)

5. GPIO : 3 undocumented GPIO signals

6. Reset : active low reset signal

I designed a breakout board modeled on the Group Gets/Pure Thermal Lepton breakout board to make the camera available as a SPI peripheral.  It's bigger than it needs to be and one of the caps interfered with the connector but it seems to work.  For full disclosure's sake, I have a relationship with Group Gets to manufacture and sell some of my designs.

The first two pics are screen grabs from Infiray's website and documentation.

The USB Dev board consists of a Realtek RTS5836 USB camera interface chip, a Winbond 25X10CLN1G 1Mb SPI Flash memory chip and 3 DC-DC converters (a boost converter followed by a 3.3V buck and 5V linear regulator).  I couldn't find any documentation for the RTS5836 but it seems to similar to the RTS5803 USB2.0 UVC compatible camera controller.  The flash memory chip probably holds the configuration for the Tiny1C sent via I2C at boot to get it up and running.

I'm guessing that some of Infiray's consumer products (like the camera dongles) and some of the other modules are essentially the Tiny1C and this USB circuitry in an enclosure.

I could not get my board to work.  The board enumerates and presents itself as a UVC device but I could get no image, either with the demo app or any other UVC display program.  I also couldn't use the app's interface to communicate with the camera.  After a bunch of debugging I found that the I2C bus pull-ups are not being powered.  It appears the supply line (maybe 2.8V) comes from a pin on the RTS5836 but that output is 0V.  I even removed and re-soldered the chip to make sure it had a good connection.  I moved on and got the camera running with my own code.


Thank you for sharing  :-+

I am currently ‘playing’ with a Infiray P2 Pro camera and your comment on the USB interface helped to explain why the driver makes mention of Realtek in the .inf file. From the information I currently have, the P2 series contains the Tiny1-b core which combines the microbolometer PCB with the USB interface PCB.

I look forward to future posts on your experiences with the Tiny1-c  :-+


I am using an ESP32 board I designed, called gCore (, as my initial development platform. It has a 480x320 pixel touchscreen (16bpp) and battery/power management circuitry.  I hacked together a hand-wired interposer board to connect the Tiny1C breakout to gCore's expansion ports (3.3V power, I2C and SPI).  The initial code has been written using the ESP32 Arduino environment but I will eventually move over to the Espressif IDF v4.4.2.  I can get the full 25 fps using both ESP32 cores and two SPI/DMA engines if I'm only getting YUV image data or radiometric temperature data but not both.  To do that I think I'll have to move to the ESP32-S3 and use the 8-bit DVP interface.

Initially I wrote my own CCI code to try to understand the way Infiray formats commands but that grew tedious and I ported their demo codebase which provides an API for controlling the camera and other functions such as calibration and ambient environment correction.

Some of the advanced features such as calculating correction values, calibrating a sensor and getting accurate temperature data use a library, libirtemp, that they don't give away the source for.  They have to compile it for each RTOS platform.  I haven't yet asked to have a version built for ESP32 (or ESP32-S3) but they wouldn't give me the source, even under NDA.  There's another similar library, libiruvc, that I think exists for people developing applications that interface with cameras over USB.


[0] Message Index

[#] Next page

There was an error while thanking
Go to full version
Powered by SMFPacks Advanced Attachments Uploader Mod