LIN Bus (Local Interconnect Network), 1990'ların sonunda LIN Konsorsiyumu (BMW, VW, Audi, Volvo, Mercedes-Benz ve Freescale gibi üreticiler) tarafından geliştirilmiş, otomotiv sektöründe CAN Bus'a düşük maliyetli bir alternatif/tamamlayıcı olarak sunulan tek hatlı (Single-Wire), senkronize, tek sunucu / çoklu istemci (Master / Slave) mimarisine dayanan bir seri haberleşme protokolüdür. Kapı kilitleri, koltuk ayarlayıcıları, cam krikoları, klima fanları ve yan aynalar gibi yüksek bant genişliği gerektirmeyen gövde elektroniği uygulamalarında yaygın olarak tercih edilir.

LIN Bus, kablolama maliyetlerini ve ağırlığı minimuma indirmek için tek bir dijital sinyal hattı (ve ortak akü/sistem GND) kullanır:
LIN protokolünde tüm iletişim Master cihazın başlattığı sorgular (Poll) üzerinden yürütülür. Çakışma (collision) ve hakemlik (arbitration) riski tamamen ortadan kaldırılmıştır. Bir mesaj çerçevesi iki ana bölümden oluşur:
| Bölüm | Saha / Alan | Açıklama |
|---|---|---|
| Header (Başlık) [Master Gönderir] |
Sync Break | En az 13 bit uzunluğunda Dominant (0) sinyali. Çerçevenin başladığını bildirir. |
| Sync Byte | Sabit 0x55 baytı. Slave cihazların kendi dahili osilatörlerini Master hızıyla senkronize etmesini sağlar (Kristalsiz ucuz MCU kullanımı). |
|
| Protected ID (PID) | 6-bit Frame ID + 2-bit Parity. Mesajın kimliğini ve hangi Slave'in yanıt vereceğini belirler. | |
| Response (Yanıt) [Slave veya Master Yanıtlar] |
Data Field | 2, 4 veya 8 Bayt uzunluğunda taşınan gerçek veri yükü (Payload). |
| Checksum | Hata denetimi için hesaplanan 8-bit doğrulama baytı (LIN 2.0+ için PID dahil Enhanced Checksum). |
0x55 (biner: 01010101) baytı sayesinde Slave cihaz, bit sürelerini ölçerek saat frekansını anlık olarak Master ile tam uyumlu hale getirir.
Mikrokontrolcülerin 3.3V/5V UART sinyallerini 12V LIN seviyesine dönüştürmek için TJA1021 veya MCP2003 gibi LIN PHY entegreleri kullanılır. LIN protokolü temelde UART donanımını kullandığından, Sync Break sinyali baudrate geçici olarak düşürülerek veya Özel Break Fonksiyonları çağrılarak üretilir.
#include <Arduino.h>
#define LIN_RX_PIN 16
#define LIN_TX_PIN 17
#define LIN_CS_PIN 5 // Transceiver Chip Select / Enable Pini
#define LIN_BAUDRATE 19200
// LIN PID Parity Hesaplama Fonksiyonu
uint8_t linHesaplaPID(uint8_t id) {
uint8_t p0 = ((id >> 0) ^ (id >> 1) ^ (id >> 2) ^ (id >> 4)) & 0x01;
uint8_t p1 = !(((id >> 1) ^ (id >> 3) ^ (id >> 4) ^ (id >> 5)) & 0x01);
return (id & 0x3F) | (p0 << 6) | (p1 << 7);
}
// LIN Enhanced Checksum Hesaplama Fonksiyonu
uint8_t linHesaplaChecksum(uint8_t pid, uint8_t* data, uint8_t len) {
uint16_t sum = pid; // Enhanced Checksum PID'yi dahil eder (LIN 2.0+)
for (uint8_t i = 0; i < len; i++) {
sum += data[i];
if (sum > 255) sum -= 255;
}
return (uint8_t)(~sum);
}
void setup() {
Serial.begin(115200); // Seri Monitör
pinMode(LIN_CS_PIN, OUTPUT);
digitalWrite(LIN_CS_PIN, HIGH); // LIN Transceiver'ı Uyandır / Aktif Et
// LIN UART Başlat (19200 Baud, 8N1)
Serial2.begin(LIN_BAUDRATE, SERIAL_8N1, LIN_RX_PIN, LIN_TX_PIN);
Serial.println("LIN Bus Master Düğümü Başlatıldı.");
}
// LIN Master Çerçeve Gönderme Metodu
void linMasterHeaderGonder(uint8_t rawID, uint8_t* data, uint8_t dataLen) {
uint8_t pid = linHesaplaPID(rawID);
uint8_t checksum = linHesaplaChecksum(pid, data, dataLen);
// 1. BREAK SİNYALİ ÜRETİMİ (Düşük baudrate ile hatta uzun '0' basma)
Serial2.end();
Serial2.begin(9600, SERIAL_8N1, LIN_RX_PIN, LIN_TX_PIN);
Serial2.write(0x00); // 9600 Baud '0x00' -> 19200 Baud'da ~18-bit genişliğinde Break üretir
Serial2.flush();
// Standart LIN Hızına Geri Dön
Serial2.end();
Serial2.begin(LIN_BAUDRATE, SERIAL_8N1, LIN_RX_PIN, LIN_TX_PIN);
// 2. HEADER: SYNC BYTE (0x55) VE PID GÖNDERİMİ
Serial2.write(0x55);
Serial2.write(pid);
// 3. RESPONSE: DATA VE CHECKSUM GÖNDERİMİ
for (uint8_t i = 0; i < dataLen; i++) {
Serial2.write(data[i]);
}
Serial2.write(checksum);
Serial2.flush();
}
void loop() {
// Örnek: ID 0x20 olan Slave cihaza (Yan Ayna Ayarı) 2 bayt komut gönder
uint8_t komutVerisi[2] = {0x01, 0xFF};
linMasterHeaderGonder(0x20, komutVerisi, 2);
Serial.println("LIN Paket Gönderildi (ID: 0x20)");
delay(1000);
}
| Parametre | LIN Bus | CAN Bus (2.0) | CAN FD |
|---|---|---|---|
| Maksimum Hız | 19.2 kbit/s - 20 kbit/s | 1 Mbit/s | 5 - 8 Mbit/s |
| Kablolama / Hat Sayısı | Tek Tel (Single Wire) + GND | 2 Tel Diferansiyel (CAN_H, CAN_L) | 2 Tel Diferansiyel (CAN_H, CAN_L) |
| Çalışma Gerilimi | 12V / 24V (Akü Seviyesi) | 5V / 3.3V Sinyalleşme | 5V / 3.3V Sinyalleşme |
| Mimarisi | Single-Master / Multi-Slave | Multi-Master / Peer-to-Peer | Multi-Master / Peer-to-Peer |
| Maksimum Veri Yükü | 8 Bayt | 8 Bayt | 64 Bayt |
| Maliyet (Düğüm Başına) | Çok Düşük (Kristalsiz MCU uyumlu) | Orta | Yüksek |
Henüz yorum yapılmamış. İlk yorumu siz yapın!