Since you brought the subject up, I'm posting this to bring everyone up to date on where we stand with the JP1.2 remotes. I've been taking a look at them for a while now, but work and family obligations have conspired to prevent me from having the kind of time needed to make as much progress as I'd like. If you (or anyone else) would care to jump in and do some work on this, I'd be happy to answer any questions if I can.
This may get a little technical in places, but I'm assuming my audience is somewhat technically oriented.
I've mostly been investigating the URC-8820 as it seems to be a good representative of this type of remote. I ripped one apart and created
this schematic. The CPU used is a Freescale (ex-Motorola) MC9S08RC60FG (
data sheet available here), which contains 60K bytes of flash memory and IR generation hardware. I've also looked at an RS 15-2144 (a half-Kameleon type) and found that it uses the same CPU, and I verified that the JP1 connector is wired the same as the URC-8820 (even though it is marked "JP1.1"). In fact, it uses two of the same CPU chips. One is used only to control the Kameleon display.
A normal JP1 remote contains an I2C serial EEPROM chip that is used to hold the settings and upgrades. It is this EEPROM chip that the JP1 interface communicates with via the JP1 connector. The JP1.2 remotes differ in that the settings and upgrades are stored in the processor's internal flash memory, and there is no external serial EEPROM chip. We know that UEI is able to upgrade the JP1.2 remotes utilizing only the connections available on the JP1.2 connector, but we do not know what sort of protocol is involved.
A standard JP1 connector is wired like this:
Code: Select all
V+/NC 1 2 V+
GND 3 4 SDA
RESET 5 6 SCL
When communicating via the JP1 connector, the RESET line is held low to disable the CPU, and then the SDA & SCL lines are used to talk directly to the serial EEPROM chip using normal I2C techniques. A typical remote would have a 2K-byte EEPROM, such as the 24C16. A glance at a data sheet for these chips will tell you all you need to know about the I2C aspect. Various brands of chips are used, but Atmel or Microchip would be representative.
The JP1.2 connector is wired like this:
Code: Select all
V+ 1 2 RESET
GND 3 4 DATA-IN
BKGD 5 6 DATA-OUT
As you can see, pin 5 is wired to the BKGD pin of the CPU. This is the "single-wire debugger" interface documented by Freescale for the HC12/HC08/HCS08 series of processors. There was some initial excitement about this being a means of talking to these remotes, but I doubt that it will be of any practical benefit. It seems that once security is enabled in the flash memory, the BKGD functionality is reduced to one operation: erasing the entire flash memory. Why did UEI put this connection on the JP1.2 connector? Probably so that they could do a complete firmware update if they wanted to, but I'm sure that its only an option of last resort. I doubt that the average JP1 user would have a sufficient level of interest, but it certainly means that you could in theory generate your own code from scratch and load it into the remote via the BKGD pin. I think this would qualify as the ultimate "extender"!
Activating the RESET pin does pretty much what you'd expect. After a RESET, the remote gives a two-blink A-OK indication on the LED, the same as the reset you get when the batteries are installed.
So, that leaves us with the two pins which I've labelled DATA-IN (pin 4) and DATA-OUT (pin 6). As you can see from the schematic, these are wired to two of the input pins used by the keyboard matrix. When pulled low, these pins are capable of generating an interrupt that can wake the processor up from sleep mode. I've tried manipulating these lines in various ways while the remote is operational, but about all it seems to accomplish is to stall the keyboard scan routine and/or force a reset.
Unlike a current JP1 remote, we won't be able to communicate with it while RESET is held active, since the processor needs to be executing the code used for communication. Given this, and the results of my experimentation, I've come to the conclusion that the remote needs to be placed in some sort of special communcations mode before we can talk to it. I think I may have found this mode.
Start out by asserting the RESET line. This forces most of the processor port pins to an input state. Next, pull the DATA-IN (pin 4) line low. Now release the RESET line. Approximately 45 mS after RESET is released, you can observe that the DATA-OUT (pin 6) line is driven high by the processor. The remote does not give it's normal two-blink A-OK indication on the LED, and does not respond to pressing any buttons. It will remain in this state until a normal RESET is done. The CPU does not enter sleep mode. DATA-IN remains set as an input, and DATA-OUT stays set as an output.
So there you have it; you now know pretty much everything we currently know about the JP1.2 remote hardware. The next step is obviously to figure out what sort of serial communications protocol is used. I've tried a few ideas out, but so far without success. If anyone has any ideas, please feel free to investigate them, or at least mention them here so others can investigate them. This might be a significant challenge becuase you are up against people who are experts in serial communications--remember that UEI has their entire knowledge base of IR protocols to draw from for ideas. If I had to venture a guess/wish, I'd hope they use some sort of self-clocking protocol so that PC latency would not have an impact on the timing.
If you want to play around with this, you'll need to make up a modified JP1 cable. I've been using a modified ultra interface (using a 74HC125) connected to a parallel port. I have not tried a simple interface. The CPU is not rated for 5V, so I'd suggest you use 1K current limiting resistors to cross voltage barriers. First, you'll need to move the RESET from pin 5 over to pin 2, and pick up V+ from pin 1 instead of pin 2. Then, disconnect the existing SCL signal from pin 6. You can leave pin 4 as it is. Finally, you need some way for the PC to read pin 6. I moved the read-back buffer from pin 4 over to pin 6.
I do plan on continuing my investigatation as time permits, and I'll certainly post any new findings, but it would be great if others could join in this effort.
Good luck. As always, if you are caught playing around with JP1, the Secretary will disavow any knowledge of your actions.
