Notices
ECU Flash

AT/SST/CVT MUT communication

Thread Tools
 
Search this Thread
 
Old Nov 30, 2009, 10:15 PM
  #16  
Evolved Member
Thread Starter
 
acamus's Avatar
 
Join Date: Mar 2008
Location: Lattitude 48.38°, Longitude 17.58°, Altitude 146m = Slovakia, for common dude
Posts: 730
Likes: 0
Received 3 Likes on 2 Posts
Originally Posted by fostytou
Oh no, not the break switch!


Thanks for your continuing efforts. Do the drive/neutral flags apply to manual cars as well or are they specifically flagged based off the TCU?
The MUT requests above are actual processor input pin states, so unless the wire is physically connected, the flags will not be set. The question is if they propagate to something common for both AT/MT ECU, frankly I have not had a look yet.
Old Nov 30, 2009, 11:33 PM
  #17  
Evolving Member
iTrader: (2)
 
knochgoon24's Avatar
 
Join Date: Feb 2009
Location: State College, PA
Posts: 109
Likes: 0
Received 0 Likes on 0 Posts
Originally Posted by acamus
I have disassembled Galant/Lancer/Eclipse/EVO AT ECU, they are all the same, in the sense of MUT requests but unfortunatelly I do not have H8 AT ECU so I cannot confirm.
Maybe you can simply connect the cable and test it out
I may just do that.
Old Dec 1, 2009, 12:36 PM
  #18  
Evolved Member
Thread Starter
 
acamus's Avatar
 
Join Date: Mar 2008
Location: Lattitude 48.38°, Longitude 17.58°, Altitude 146m = Slovakia, for common dude
Posts: 730
Likes: 0
Received 3 Likes on 2 Posts
I have found the Init byte for AT MUT, credit goes to Ceddy for idea of sending all 256 values at 5 baud.)
The init code is 0x3, so incredibly simple
Then switching to 15625 and sending AT MUT requests.

I believe my quest is now finished, until some interest is shown (nads, mattjin still around?) and Hamish will incorporate it to EvoScan :P

@Hamish, here is a class that you may find useful (C#)
Code:
  
    public class FiveBaudRateSender  
    {
        private SerialPort serialPort { get; set; }

        public FiveBaudRateSender(SerialPort aPort)
        {
            serialPort = aPort;
        }

        public void SendByte(byte aByte)
        {  
           SendStartBit();   
           SendBits(aByte);   
           SendStopBit();   
           SendPause();  
        }

        private void SendPause()
        {
             serialPort.BreakState = false;
             Thread.Sleep(50);              
        }

        private void SendStopBit()
        {
            byte[] aBytes = new byte[1] { 1 };
            BitArray aBA = new BitArray( aBytes );
            Transmit( aBA, 1 );
        }

        private void SendStartBit()
        {
             byte[] aBytes = new byte[1] { 0 };
            BitArray aBA = new BitArray( aBytes );
            Transmit( aBA, 1 );
        }

        private void SendBits(byte aByte)
       {
          byte[] aBytes = new byte[1] { aByte };
          BitArray aBA = new BitArray( aBytes );
          Transmit( aBA, 8 );     
       }

       private void Transmit(BitArray aList, int aWidth)
       {      
          for ( int i = 0; i <= aWidth-1; i++)
          {
             serialPort.BreakState=!aList[i];
             Thread.Sleep(200);         
          }
       }

    }
and code example

Code:
            if(serialPort.IsOpen)
            {
            	FiveBaudRateSender aSender = new FiveBaudRateSender(serialPort);
                aSender.SendByte((byte)0x3);
            }
Old Dec 1, 2009, 03:05 PM
  #19  
Evolved Member
iTrader: (2)
 
logic's Avatar
 
Join Date: Apr 2003
Location: Berkeley, CA
Posts: 1,022
Likes: 0
Received 6 Likes on 5 Posts
Originally Posted by acamus
Code:
       private void Transmit(BitArray aList, int aWidth)
       {      
          for ( int i = 0; i <= aWidth-1; i++)
          {
             serialPort.BreakState=!aList[i];
             Thread.Sleep(200);         
          }
       }
Hah, that looks familiar!
Code:
class OBDInit:
    BAUD = 10500
    INITBYTE = 0x33
    INITBAUD = 5

    def __init__(self, fd):
        self.fd = fd                  # s/b serial.Serial()
        self.fd.setBaudRate(self.BAUD)
        self.fd.setByteSize(8)
        self.fd.setParity('N')
        self.fd.setStopbits(1)
        self.fd.flush()

        bits = self.INITBYTE
        initdelay = 1.0/self.INITBAUD
        for _ in range(9):            # 9 gives implicit stop bit w/shifting.
            if bits & 1:
                self.fd.setRTS(True)
                self.fd.setDTR(True)
            else:
                self.fd.setDTR(False)
                self.fd.setRTS(False)
            bits >>= 1
            time.sleep(initdelay)

[...snip...]

class MUTInit(OBDInit):
    BAUD = 15625
    INITBYTE = 0x01
    INITBAUD = 5
Old Dec 1, 2009, 09:35 PM
  #20  
Evolved Member
Thread Starter
 
acamus's Avatar
 
Join Date: Mar 2008
Location: Lattitude 48.38°, Longitude 17.58°, Altitude 146m = Slovakia, for common dude
Posts: 730
Likes: 0
Received 3 Likes on 2 Posts
Yes the same thing, but you are obviously forgetting about the start bit and pause

Last edited by acamus; Dec 1, 2009 at 10:39 PM.
Old Dec 2, 2009, 08:03 AM
  #21  
Evolved Member
iTrader: (2)
 
logic's Avatar
 
Join Date: Apr 2003
Location: Berkeley, CA
Posts: 1,022
Likes: 0
Received 6 Likes on 5 Posts
I may have skipped a bit of code in that example.
Related Topics
Thread
Thread Starter
Forum
Replies
Last Post
Jack_of_Trades
ECU Flash
363
May 29, 2018 07:05 AM
mrfred
ECU Flash
44
Dec 11, 2011 06:01 PM
EvolNinja
ECU Flash
3
May 27, 2010 05:00 PM
Danieln
ECU Flash
1
Apr 15, 2010 05:04 AM
al\lupo
ECU Flash
2
Dec 26, 2007 10:47 PM



Quick Reply: AT/SST/CVT MUT communication



All times are GMT -7. The time now is 04:03 PM.