Intro
Turning an iMX6 board into a perfect mediacenter certainly requires to be able to interact thanks to an IR remote command.
Some of you may think it is a thing of the past and a nice remote application on a smartphone is the way to go but I may be quite old school as I still think that a plain old remote is very useful.
If your TV and your board support CEC, then your TV remote can be the right candidate. Unfortunately, as I pointed in a previous article, only a few products (utilite being the only one I have successfully tested so far) wire correctly the CEC signal.
If you are unlucky with CEC, a IR receiver may be very welcome. Here again there are no many imx6 boards/products which have such a feature. As far as I know solidrun cuboxi products/boards are the only one.
So when a user, Rene vand den Braken, sent to me a way to add this feature thanks to a very cheap component 2 months ago, I though it is worth sharing this with all of you. (I am ashamed for being so long to write this article).
The wandboard will be used here but the same kind of hack can be done on any imx6 board with VCC/GND and a GPIO available on headers with minor modifications.
At last, it is worth mentioning that the initial driver/idea comes from Aron Robert Szabo and his work on RaspberryPi and that even if this hack works fine at least for Rene and I, you decide to realize it under your own responsibility and we will not be responsible if you damage your board…
Hardware
At hardware level, we use a Vishay TSOP4838. It is a very affordable component : I have been able to order 5 pieces for 2.6$ (shipment included) on ebay.
You can read the whole datasheet but here is what you need to know :
The TSOP has 3 pins :
1 = OUT, 2 = GND, 3 = Vs
For our example, we will connect the TSOP on the JP4 header
And we will connect :
- TSOP 2 to JP4 pin 19
- TSOP 3 to JP4 pin 1
- TSOP 1 to JP4 pin 18
Here is how it looks like on my own wandboard
Software
Changes are required in the kernel (they will be included in my next image of course).
First the GPIO has to be freed from the generic GPIO framework to be usable for our needs. For now, the used pin is hardcoded and you will have to change this by yourself if you decide to use another GPIO.
Then, a dedicated lirc driver (lirc_wand.c) is required : This driver has been provided by Renรฉ (as a derivative work from Aron lirc_rpi.c driver).
All the required changes are available in this commit
This new kernel driver will behave as a lirc_serial driver and the standard userspace lirc tools will be usable after loading it by :
modprobe lirc_wand
Maybe I can summarize how to start quickly with lirc user tools :
irrecord -n -d /dev/lirc0 myremote.conf
will enable to create a new configuration file for your remote.
You can launch lircd that way :
lircd -d /dev/lirc0 /path/to/myremote.conf
And, at last, you can test the correct behavior by launching
irw
and pressing buttons on your remote
Many LIRC tutorials will give you further details…
Conclusion
That’s it ! Now, you can have fun with your IR remotes.
All this work can easily be adapted for another imx6 board…
Hi stephan
Thank you very much for share this topic. : )
You connect Vishay TSOP4838 to GPIO 19,but after checked your patch
code,nothing change about GPIO 19,
just like this:
+ //RvdB let lirc use IMX_GPIO_NR(4, 5) “external_gpio_7”
I am puzzled why need to use IMX_GPIO_NR(4, 5) instand of GPIO 19.
Can you help me with this . : )
Thanks
Kind Regards
steven
Hi Steve,
The gpio numbering is a mess ๐
A good explanation can be found at http://android.serverbox.ch/?p=972.
In the kernel : #define IMX_GPIO_NR(bank, nr) (((bank) – 1) * 32 + (nr))
so IMX_GPIO_NR(4, 5) == gpio101 (same number as used in /sys/class
interface.)
In the wandboard documentation this is external_gpio_7, which they name GPIO_19, do not ask me why ๐
Greetings Rene
Hi Rene
Thank you very much for your explanation. : )
Regards
steven
Hi,
Sorry for the delay of my answer,
Thanks to Rene for pointing the kernel numbering scheme.
In fact there is always a convention to number the gpio in, the Linux GPIO framework. ..
Other numbering is “normal” the GPIO_19 is the real name of the pin as you will find it on wandboard schematics and freescale reference manual. In this RM (p284) you can see that the pin GPIO_19 is called (ALT5 mux conf) : GPIO4_IO05
I hope this helps…
Regards
Stephan
Hi stephan
Thank you very much for your explanation,I am understand now. ahh : )
Thanks
Kind Regards
Hi stephan
Today i success load the LIRC module as you provide. : )
I can see the debug information
lirc_wand lirc_matrix.0: lirc_dev: driver lirc_wand registered at minor = 1
lirc_wand: driver registered!
lirc_wand: using irq 275
auto-detected active high receiver on GPIO pin 19,
The GIPO we are using GPIO 19.
But when i using
irrecord -n -d /dev/lirc0 myremote.conf
to detect IR remote input , It can not detect anythings, We can success detect the wave in GPIO 19.
We have tested NEC32 and RC6 remote both can not.
Can you give us some ideal about this?
Thank you very much.
Regards
steven
Hi steven
Which version of lirc usertools do you use ?
I will post you the ones I have used to perform my tests tomorrow…
Regards
Hi stephan
All is ok now, I missed the init GPIO pin to imx6q, : )
After add
_MX6Q_PAD_SD1_DAT2__GPIO_1_19
to imx6q all is ok now.
Thanks again for your help. : )
Regards
steven
Yes !
It is worthy to mention it : The IOMUX has also to be properly configured…
Thanks for the update…
Stephan
Hmm registered at minor=1, doesn’t that mean you need dev/lirc1 ?
(lirc_matrix.0 is that another lirc device ?)
Greetings rene
Hi Rene
Here have three lirc in dev
ls /dev/lirc
lirc lirc0 lirc1
just have tried lirc1 , and lirc
irrecord -n -d /dev/lirc1 myremote.conf
irrecord -n -d /dev/lirc myremote.conf
It is the same nothing happen when i press the remote bottom .
Thanks
Kind Regards
steven
Hi stephan&Rene
Now all is ok now, I missed the init GPIO pin to imx6q, : )
After add
_MX6Q_PAD_SD1_DAT2__GPIO_1_19
to imx6q all is ok now.
Thanks again for your help. : )
Regards
steven
Pingback: First look at Matrix TBS2910 | Stephan's blog
Pingback: Yet another yocto image | Stephan's blog
Hi, I have udoo board, I also want to have this ir receiver on my board.
so I ported it to udoo – it is the same code like yours I just changed name and pin nr. I recompiled yours kernel src with this driver. I also use your image for udoo. driver is loaded correctly. but when I am trying to use irrecord I see:
irrecord: usb_irtoy: could not reset tty
irrecord: WARNING: invalid lockfile (/var/lock/browse.dat) detected
irrecord: WARNING: invalid lockfile (/var/lock/gencache_notrans.tdb) detected
irrecord: WARNING: invalid lockfile (/var/lock/gencache.tdb) detected
irrecord: WARNING: invalid lockfile (/var/lock/printer_list.tdb) detected
irrecord: WARNING: invalid lockfile (/var/lock/serverid.tdb) detected
irrecord: WARNING: invalid lockfile (/var/lock/notify_onelevel.tdb) detected
irrecord: WARNING: invalid lockfile (/var/lock/notify.tdb) detected
irrecord: WARNING: invalid lockfile (/var/lock/locking.tdb) detected
irrecord: WARNING: invalid lockfile (/var/lock/brlock.tdb) detected
irrecord: WARNING: invalid lockfile (/var/lock/connections.tdb) detected
irrecord: WARNING: invalid lockfile (/var/lock/sessionid.tdb) detected
irrecord: WARNING: invalid lockfile (/var/lock/messages.tdb) detected
irrecord: could not init hardware (lircd running ? –> close it, check permissions)
and then I listed
irrecord -H dumy
Driver `dumy’ not supported.
Supported drivers:
usb_irtoy
I checked on web and packages for udoo and for wandboard are diffirent.
I suppose that wanboards rpm contain proper drivers?
Could you prowide the same lirc package for udoo or can you suggest me what is wrong with my lirc?
Hi Stephen,
first of all, thank you very much for all your hard work to put those images together. You’ve done an incredible job.
My setup is a Wandboard quad. I have been able to go all the way to issue an “irw” command with success. The lircd is running and gets well any key that I send from my Apple TV2 remote. So far so good. The problem is that XBMC does not seem to get any command from the remote and after several hours of testing I am totally desperate. I have tried many config files for XBMC and lirc with no success.
It be great if you could give me a hand and head me to the right direction, namely where do I start to debug this problem.
best regards,
Pepe
Pingback: Make IR working on the wandboard | JB's DEV STORY
Hi, I appreciate this is an old post, but I am a recent wanda-user,
I would like to try this component but I dont use linux, I use RISC OS. Any chance you could give me a link to the driver source where the data is sampled and decoded please. Thanks, Matt
It may be very easy to make changing animated advertising video with Explaindio Video Creator.
Virtual Coaching is the proper device for people who have all the Time To Thrive Challenge Review – facebook.com – felt the
urge to assist other individuals.