پروتکل K-Line یک روش استاندارد ارتباطی OBDII هست که قبل از آنکه پروتکل CAN فراگیر شود در خودروها استفاده میشده است. K-Line فقط یک اسم فانتزی برایUART تک سیم با ارتباط نیمه دوطرفه[1] که دارای سرعت 10.4 kbps بوده و از سطوح ولتاژ 0 و 12 ولت استفاده می کند، است. سطح ولتاژ بالای آن در حقیقت همان ولتاژ باتری است که بین 12 تا 4/14 (زمان روشن بودن موتور) تغییر می کند.
پروتکل KLine برای تبادل داده از استانداردهای UART پیروی میکند. به این صورت که در حالتی که هیچ تبادل دادهای در حال انجام نباشد خط انتقال در حالت بیکاری[2] قرار داشته و خط ارسال در سطح ولتاژ یک منطقی است. برای شروع ارسال داده خط از مقدار یک به مقدار صفر منطقی تغییر داده میشود این صفر شدن به مدت یک بیت باید طول بکشد و به آن بیت شروع[3] گفته می شود. در ادامه یک بایت داده (معادل هشت بیت) از سمت کم ارزشترین بیت ارسال میشود. در نهایت یک بیت پایان[4] که معادل یک منطقی است ارسال میشود. طبق آنچه گرفته شد برای تبادل داده با KLine باید از استاندارد UART با 8 بیت داده، بدون بیت توازن و یک یا دو بیت پایان (اختیاری!) استفاده کرد (شکل 9).
لایه سطح فیزیکی KLine بسیار ساده بوده و برای ارتباط با این روش به یک میکروکنترلر و چند ترانزیستور نیاز هست (شکل 10).
شکل 10- مدار مبدل KLine به UART
دریافت داده از K-Line با استفاده از یک مقسم ولتاژ ساده انجام می شود که با توجه به ولتاژ کاری میکروکنترلر طراحی میگردد. با توجه به اینکه حداکثر ولتاژ K-Line بین 12 تا 4/14 نغییر میکند، خروجی مقسم نباید از ولتاژ کاری میکروکنترلر بیشتر شود.
ارسال داده نیز بسیار ساده هست. تنها نکته این است که سطح حالت بیکاری ولتاژ UART باید بالا باشد. بنابراین در اینجا باید از دو عدد ترانزیستور NPN سری با آرایش کلکتور باز و مقاومت بالا کشنده استفاده کرد. در صورتی که میکروکنترلر ( مانند AVR XMEGA) توانایی معکوس کردن پایه TX را داشته باشد می توان از یک ترانزیستور هم استفاده کرد.
خط LLine فقط از میکروکنترلر ارسال شده و طریقه اتصال این پایه به میکروکنترلر در شکل 11 (الف) ترسیم شده است.
با توجه به اینکه الگوی شروع کند باید با نرخ ارسال 5 bps ارسال شود و معمولا این نرخ داده به سختی با UART در میکروکنترلرها حاصل میشود بهتر است از یک مدار کنترلی دیگر (شکل 11 (ب) برای ارسال الگو استفاده شود.
شکل 11- مدار اتصال پین LLine و پین کنترل کننده KLine
همانطور که در شکل 12 نشان داده شده، ساختار پیام شامل سه قسمت است: هدر، داده، چک سام. به عنوان مثال برای خوانند مقدار دمای آب خنک کننده کد {0xC2,0x33,0xF1,0x01,0x05,0xEC} ارسال میشود.
این بخش می تواند حداکثر شامل 4 بایت باشد. اولین بایت، بایت فرمت بوده که شامل اطلاعاتی در مورد فرمت پیام است. بایتهای دوم و سوم که نشان دهندهی آدرس منبع و هدف هستند می توانند وجود داشته باشند یا نباشند. در نهایت بسته به طول داده، بایت چهارم میتواند در هدر وجود داشته باشد یا نباشد. مثلا در برای درخواست دمای آب خنک کننده بخش هد شامل {0xC2,0x33,0xF1} است که 0xC2 بایت فرمت، 0x33 بایت آدرس هدف و 0xF1 بایت آدرس منبع بوده و بایت طول در آن وجود ندارد.
دو بیت با ارزش بایت فرمت، مد آدرس دهی را مشخص میکند و 6 بیت دیگر طول فریم پیام را مشخص میکند (شکل 13). حالتهای مختلف آدرس دهی در جدول 2 آورده شده است. اگر دو بیت مربوطه “00” باشند هیچ اطلاعات آدرسی ارسال نمیشود. اگر دو بیت مربوطه “01” باشند آنگاه در مد CRAB است. در صورتی که دو بیت مربوطه “10” باشند آنگه آدرس دهی به صورت فیزیکی است. یعنی فقط به یک یونیت خاص درخواست داده میشود. و در نهایت اگر “11” باشد، درخواست به گروهی از یونیت ها داده میشود.
بیت های L5-L0 طول داده موجود در پیام را مشخص میکنند (بایت چک سام شامل نمیشود). بنابراین طول داده می تواند بین 0 تا 63 بایت باشد. اگر این بیتها صفر باشند از بایت چهارم در هدر برای نشان دادن طول داده با حداکثر 255 استفاده میشود. در مثال خواندن دمای آب خنک کننده، بایت فرمت 0xC2 بود. یعنی مد آدرس دهی برابر با آدرس دهی فانکشنال و تعداد بایت داده ارسالی برابر با 2 است.
مد | A0 | A1 |
بدون اطلاعات آدرس | 0 | 0 |
مد CRAB، در این مد از بایت فرمت 68 و 48 استفاده میشود. | 1 | 0 |
با آدرس دهی فیزیکی | 0 | 1 |
با آدرس دهی فانکشنال | 1 | 1 |
جدول 2- انواع مد آدرس دهی در KLine
این بایت آدرس هدف پیام را مشخص میکند و همیشه همراه با آدرس منبع استفاده میشود. هم به صورت فیزیکی و هم فانکشنال میتواند باشد. آدرس فیزیکی میتواند بایت آدرس در شروع کند باشد یا طبق استاندارد بین الملی (شکل 14). این بایت اختیاری بوده و فقط در باسهایی با توپولوژی چند نود ضروری است. برای ارتباطات نود به نود (تک نود) می توان از این بایت صرف نظر کرد. در مثال خواندن دمای آب خنک کننده، مقدار بایت آدرس هدف، 0x33 است.
این بایت آدرس دستگاه فرستنده را مشخص میکند. این آدرس باید یک آدرس فیزیکی باشد. و مقدار آن مشابه مقدار بایت آدرس هدف تعیین میشود. این بایت اختیاری بوده (همیشه با آدرس هدف همراه است) و فقط در شبکه های چند نودی ضروری است. در شبکه های تک نود می توان از آن صرف نظر کرد. در مثال خواندن دمای آب خنک کننده، مقدار بایت آدرس هدف، 0xF1 است. محدود تعریف شده این آدرس در شکل 14 آورده شده است.
آدرس پیشرانه (قوای محرکه) | مقدار hex |
شرکت سازنده | 00 – 0F |
موتور | 10 – 17 |
انتقال قدرت (گیربکس، دیفرانسیل) | 18 – 1F |
شاسی |
|
شرکت سازنده | 20 – 27 |
ترمز | 28 -2F |
فرمان | 30 – 37 |
تعلیق | 38 – 3F |
بدنه |
|
شرکت سازنده | 40 – 57 |
ایمنی | 58 – 5F |
نمایشگر | 60 – 6F |
روشنایی | 70 – 7F |
صوت و سرگرمی | 80 – 8F |
ارتباط شخصی | 90 – 97 |
سرمایش و گرمایش | 98 – 9F |
کنترل درب، صندلی، پنجره و … | A0 – BF |
امنیت | C0 – C7 |
توسعه در آینده | C8 – CF |
سازند | D0 – EF |
دستگاه عیب یاب | F0 – FD |
همه نودها | FE |
هیچ نودی | FF |
شکل 14- آدرس ECU و درخواست کننده برای KWP
اگر طول پیام در بایت فرمت داده صفر باشد، از این بایت برای مشخص کردن طول پیام استفاده میشود. این بایت امکان ارسال دادههایی با طول بیشتر از 63 بایت ر ا فراهم میکند. برای دادههایی با طولهای کمتر می توان از آن صرف نظر کرد. این بایت مقدار طول پیام از ابتدای بخش داده تا چک سام (شامل چک سام نیست) را مشخص می کند. بنابراین طول داده می تواند بین 1 تا 255 باشد. برای طول داده کمتر از 64 بایت دو امکان وجود دارد. یک استفاده از بایت فرمت یا استفاده از بایت طول پیام. البته لزومی وجود ندارد که یک واحد از این هر دو روش به صورت همزمان پشتیبانی کند. در جدول 3 چونگی تعیین طول پیام به طور خلاصه آورده شده است. در مثال خواندن دمای آب خنک کننده، بایت طول پیام وجود ندارد.
بایت طول داده | بایت فرمت | طول داده |
وجود دارد | XX00 0000 | کمتر از 64 |
وجود ندارد | XXLL LLLL | کمتر از 64 |
وجود دارد | XX00 0000 | بیشتر از 64 |
جدول 3- چونگی تعیین طول پیام در KLine
با توجه با آنچه در بالا بیان شد، چهار نوع متفاوت از پیام وجود دارد
1- هدر بدون بایتهای آدرس و طول داده
چک سام | داده | شناسه سرویس | فرمت |
شکل 15 – ساختار پیام در KLine بدون بایت های آدرس و طول
2- هدر با بایت های آدرس و بدون بایت طول داده
چک سام | داده | شناسه سرویس | آدرس منبع | آدرس هدف | فرمت |
شکل 16 – ساختار پیام در KLine با بایت های آدرس ولی بدون بایت طول.
3 – هدر بدون بایت های آدرس و با بایت طول داده
چک سام | داده | شناسه سرویس | طول | فرمت |
شکل 17 – ساختار پیام در KLine بدون بایت های آدرس و با بایت طول.
4 – هدر با بایت های آدرس و طول داده
چک سام | داده | شناسه سرویس | طول | آدرس منبع | آدرس هدف | فرمت |
شکل 18 – ساختار پیام در KLine با بایت های آدرس و بایت طول.
بخش داده می تواند بسته به استفاده از بایت طول داده حداکثر شامل 64 یا 255 بایت باشد. اولین بایت شناسه سرویس است. با توجه به سرویس انتخاب شده، بایت های بعدی میتواند پارامتر یا داده باشند. در مثال خواندن دمای آب خنک کننده، بایتهای داده برابر با {0x01,0x05} هستند.
این بایت به انتهای پیام اضافه می شود. برای محاسبهی آن کافی است که همه بایتهای موجود در پیام را با هم جمع کرد. در مثال خواندن دمای آب خنک کننده، مقدار بایت چک سام برابر با 0xC2+0x33+0xF1+0x01+0x05 = 0xEC است.
[1] half-duplex
[2] Idle
[3] Start bit
[4] Stop bit
لینک قسمت اول کجاست؟
سلام
خدمت شما
قسمت اول آموزش OBD II
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.