I thought I'd update everyone on my quest. The answer seems to be that once the 4runner is under control of the add-on remote start, my only option is to use the key to enter the truck.
I found a diagram for a "Door Control Receiver" which is housed in the Driver's D Pilar behind and/or above the rear tail lights. It has four connections which are:
Ground -- Always Ground
+12V -- Always at +12
RDA -- Data line sends coded pulses to send lock and unlock messages
PGM -- Used when programing new key fobs.
Those are the only four connections, so I don't believe that there will be a way to fool the door lock controller into thinking that the ignition is off while the car is running. I *might* try tapping into the RDA line and see if I can read the pulses with some custom programming logic, and use that to trigger door lock, unlock etc on my own... but that project would be for another day.
Below is a link (and partial copy of the post... in case the link stops working) of someone who used an arduo board and custom programming to hack into the RDA line and mimick the unlock code. Maybe one day (probably not!) I'll try to read the RDA line, build a board that will send pulses when signals are received and the engine is running under remote start.
Custom Device for Door unlock
robmac
164 posts
14 Thanks
LocationMelbourne, Australia
Posted 30 July 2012 - 11:15 AM
ADDING AN AFTERMARKET WIRELESS DOOR LOCK-UNLOCK
2002 TOYOTA ESTIMA
30 JULY 2012
OVERVIEW
This document details how add and after radio receiver to a 2002 Toyota Estima. This project was undertaken because of exorbitant cost of wireless door transmitter when purchased via the Toyota dealer network. The total cost for two door remotes, arduino, radio receiver, sundry items and enclosure is around A$100.
HOW THE TOYOTA RADIO RECEIVER WORKS
The OEM radio receiver is mounted at the rear drivers side (RHD vehicle) immediately above return air vent for the rear air conditioning, just inside the rear tailgate. The radio receiver has four connections:
+12 V always on fused power
0V ground/earth connection
RDA door unlock signal sent to the body ECU
PGM a signal line that is used when programming any Toyota OEM remote door lock transmitters
I have not investigated this PGM signal because it is irrelevant for an after market remote.
The RDA signal is not a simple voltage level signal. To toggle lock/unlock the receiver sends a square wave pulse train to the body ECU. The signal comprises 12mS high-6mS low-9mS high sequence repeated 14 times. High is 8V, low is 0v.
EDIT September 2nd 2012: This pulse train is used with the single button remotes to unlock all five doors. I have a feeling there are different pulse trains used when electric self opening doors are fitted and controlled by a three button remote. If you have a three button remote be aware that different buttons will have different pulse trains and thus signal different functions to the body ECU. I don't have access to a vehicle with a three button remote, so I can't investigate the different signals.
HOW THE “AFTERMARKET” HACK WORKS
A Freetronics 11 (or Arduino) programmable microcontroller is used to generate the pulse train to trigger the vehicle body ECU and thus unlock the doors. I have provided the source code free of charge. Freetronics controllers are available everywhere and cost around A$35 for the controller plus USB cable. Drivers, instructions, programming are a free download from Freetronics and Arduino websites.
An after market radio receiver with a one button or two button is suitable. Suitable door remote kit can be from most car suppliers for around A$ 40. The only criteria is a normally open contact on the receiver, closing on when remote transmitter button is press. Receivers which send out 12vdc are also suitable.
CIRCUIT EXPLANATION
When radio remote is pressed radio receiver contact closes. Power is supplied to RL1 coil. Contact RL1 disconnects the Toyota radio receiver and connects the body ECU RDA line to pin 8 of the freetronics micro controller. This supplied power by contact RL2 closing.
When the radio remote is released radio receiver contacts open and coil of RL1 is released. RL2 contacts open and interrupts power to the freetronics micro controller. RL2 contacts change-over, disconnecting the freetronics from RDA line and connecting the Toyota receiver to the RDA line
DISCLAIMER
This information without any warranty stated or implied. If blow something up on the ECU or receiver let it be on your head.
There is one “shortcut” in the design. The Toyota receiver generates pulses of 8 volt DC level. The Freetronics provides output pulses of 5V DC level. It doesn’t seem matter at all it works fine on my vehicle.
Also be aware the code for freetronics micro controller is “quick and dirty”
My justification is that it works and took less than 3 minutes to write.
Image of the unit I built is here:
<a rel="nofollow" href="https://imageshack.us.../remote1j.jpg/" target="_blank"><img src="https://img442.images...emote1j.th.jpg" border="0"/></a>
Circuit diagram is here:
<a rel="nofollow" href="https://imageshack.us...2/remote3.jpg/" target="_blank"><img src="https://img832.images...remote3.th.jpg" border="0"/></a>
Just a note on the circuit diagram. The RDA line is cut and extended at the receiver. Power and ground are obtained from the receiver. Make sure you use the receiver earth and not some random body bolt.
The code is below and is can be cut and pasted into a freetronics “sketch”
Enjoy!
---------------------------------------------------------------------------------
int outPin = 8; // digital pin 8
void setup()
{
pinMode(outPin, OUTPUT); // sets the digital pin as output
}
void loop()
{
digitalWrite(outPin, HIGH); // sets the pin on
delay(12); // pauses for 12 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 milliseconds
digitalWrite(outPin, HIGH); // sets the pin on
delay(9); // pauses for 9 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 millioseconds 01
digitalWrite(outPin, HIGH); // sets the pin on
delay(12); // pauses for 12 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 milliseconds
digitalWrite(outPin, HIGH); // sets the pin on
delay(9); // pauses for 9 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 millioseconds 02
digitalWrite(outPin, HIGH); // sets the pin on
delay(12); // pauses for 12 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 milliseconds
digitalWrite(outPin, HIGH); // sets the pin on
delay(9); // pauses for 9 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 millioseconds 03
digitalWrite(outPin, HIGH); // sets the pin on
delay(12); // pauses for 12 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 milliseconds
digitalWrite(outPin, HIGH); // sets the pin on
delay(9); // pauses for 9 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 millioseconds 04
digitalWrite(outPin, HIGH); // sets the pin on
delay(12); // pauses for 12 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 milliseconds
digitalWrite(outPin, HIGH); // sets the pin on
delay(9); // pauses for 9 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 millioseconds 05
digitalWrite(outPin, HIGH); // sets the pin on
delay(12); // pauses for 12 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 milliseconds
digitalWrite(outPin, HIGH); // sets the pin on
delay(9); // pauses for 9 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 millioseconds 06
digitalWrite(outPin, HIGH); // sets the pin on
delay(12); // pauses for 12 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 milliseconds
digitalWrite(outPin, HIGH); // sets the pin on
delay(9); // pauses for 9 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 millioseconds 07
digitalWrite(outPin, HIGH); // sets the pin on
delay(12); // pauses for 12 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 milliseconds
digitalWrite(outPin, HIGH); // sets the pin on
delay(9); // pauses for 9 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 millioseconds 08
digitalWrite(outPin, HIGH); // sets the pin on
delay(12); // pauses for 12 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 milliseconds
digitalWrite(outPin, HIGH); // sets the pin on
delay(9); // pauses for 9 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 millioseconds 09
digitalWrite(outPin, HIGH); // sets the pin on
delay(12); // pauses for 12 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 milliseconds
digitalWrite(outPin, HIGH); // sets the pin on
delay(9); // pauses for 9 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 millioseconds 10
digitalWrite(outPin, HIGH); // sets the pin on
delay(12); // pauses for 12 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 milliseconds
digitalWrite(outPin, HIGH); // sets the pin on
delay(9); // pauses for 9 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 millioseconds 11
digitalWrite(outPin, HIGH); // sets the pin on
delay(12); // pauses for 12 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 milliseconds
digitalWrite(outPin, HIGH); // sets the pin on
delay(9); // pauses for 9 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 millioseconds 13
digitalWrite(outPin, HIGH); // sets the pin on
delay(12); // pauses for 12 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 milliseconds
digitalWrite(outPin, HIGH); // sets the pin on
delay(9); // pauses for 9 milliseconds
digitalWrite(outPin, LOW); // sets the pin off
delay(6); // pauses for 6 milliseconds 14
delay(4000); // loop pauses for 4 seconds
}
//configures pin number 8 to send a 3x pulse train of 14 times
// 12mS high - 6mS low - 9mS high - low 6mS
-----------------------------------------------------------------------------------
Edited by robmac, 02 September 2012 - 10:53 AM.
-Phil