Skip to content

Theory of operation

Tomáš Kováčik edited this page Nov 13, 2020 · 5 revisions

How it works:

3lb: 3line protocol (invert logic)
	data: 5V logic, 0v=logic 1, 5V=logic 0
	clk: 5V logic,
	ena: 5V logic, inverted CS, bidirectional

Radio mode

Radio send 18bytes long packet each time when text needs to be changed on the cluster (for example, a new station was tuned or similar), this always is sent. When data are successfully received by the cluster 100us long pulse is used to acknowledge this.

Navigation mode:

Navigation send first byte of packet (packet ID) like so: ENABLE line goes high, data are send on data/clk lines, after this ENABLE is low and cluster will "request" another byte of data by setting ENABLE line HIGH, navigation then send data over data/clk line 8bits(byte) with one rising endge on ENABLE line. 2nd byte is number of bytes in packet, so cluster know how much data need to be requested.

more from russian forum passatworld.ru translated on google:

Data transmission is carried out on 3 lines (Data, Clock, Enable). Working voltage on 5V lines. Data and Clock lines are unidirectional, line management is performed by the master device. The default lines are high. The lines Data and Clock use negative logic, i.e. the logical unit corresponds to the low level on the line, the high level on the line corresponds to the logical zero. The Enable line is bi-directional, the master device initiates the transfer, the slave device confirms reception and is ready to receive the next data piece. The default line is low. The initiation of transmission and confirmation is carried out by a high level on the line.

The transmission speed is up to ~ 125-130kHz. On the bus there is a master and slave device. The dashboard always acts as a slave. Transmission is carried out by packages. The size of the packet depends on the data transmitted (see part 2).

The master device before the start of transmission looks at the presence of a low signal level on the Enable line. Having a high level indicates that the line is busy or the slave device can not currently receive data.

The master device sets the Enable line to a high level and begins sending the first byte of the sending. The next data bit from the line is read when the clock signal goes from high to low (from logical zero to one). After transmission of the first byte, the master sets the low level on the Enable line and waits for the slave device to "raise" the Enable line, indicating that it is ready to receive the next byte. By taking another byte slave, the device "drops" the Enable line, and the master device waits for the Enable line to "rise" again to transmit the next byte. Thus, the Master controls the Enable line only when transmitting the first byte of each packet, and then only controls the presence on it of a high level of the speaker saying that the slave is ready to receive. In case the slave did not raise the Enable line to receive the next byte within ~ 150-200us, it's necessary to start sending the packet again after waiting at least 3-4ms. Do not raise the slave line Enable can also mean that the slave detected an error in the transmitted data and is not ready to continue receiving.

There is one more option for data transfer in which the master raises the Enable line before starting the transfer and drops it only after the transfer of the entire packet. It is necessary to pause between bytes of approximately 80-100us. And also to pause at least 4-5ms between packets, especially if packets go on continuously. Unfortunately, in this mode, it is not possible to control the transmitted data. A slave may simply not accept the package, and the master will not know about it.

Even more in this source code.

Clone this wiki locally