پروژه ریموت کنترلر hopping code hcs301 توسط stm32
با سلام خدمت همه دوستان
در این مطلب قصد دارم تمامی مباحث و اموزش ها راجع به ریموت کنترلر های هایپینگ کد با ic hcs301 را خدمتتون ارائه کنم و به نحوه خواندن ریموت توابع دیکد و انکد و نحوه پروگرام ic میپردازیم.
- دیکد کد های ریموت های هایپینگ کد توسط ic hcs301
- نحوه پروگرام کردن ic ریموت های هایپینگ
چیپ مورداستفاده در هر دو مدل ریموت، hcs301 بود که تولید شرکت Microchip است. آی سی مذکور داری یک EEPROM داخلی است .
دوستان دقت کنید که ارتباط در بین این ریموت ها و گیرنده کاملا رمز نگاری شده هستن این الگوریتم رمز نگاری توسط شرکت میکرو چیپ طراحی شده و به همین منظور باید یک کلید هم روی ای سی ریموت پروگرام بشه و هم در برنامه گیرنده قرار داده بشه که عملات رمز گشایی به درستی انجام بشه که ادامه کامل به مباحث میپردازیم.
برای اینکه پروتکل ارتباطی و نحوه ارسال دیتا توسط ic hcs301 را به درستی درک کنیم باید دیتاشیت ic را کامل مطالعه کنیم و سپس کد سخت افزاری را پیاده سازی کنیم
آموزش ic hcs301 و بررسی دیتاشیت و پروتکل ارتباطی آن:
FEATURES
Security
• Programmable 28-bit serial number
• Programmable 64-bit encryption key
• Each transmission is unique
• ۶۶-bit transmission code length
• ۳۲-bit hopping code
• ۳۴-bit fixed code (28-bit serial number,
۴-bit button code, 2-bit status)
• Encryption keys are read protected
Operating
• ۳٫۵V – 13.0V operation
• Four button inputs
– ۱۵ functions available
• Selectable baud rate
• Automatic code word completion
• Battery low signal transmitted to receiver
• Battery low indication on LED
• Non-volatile synchronization data
Other
• Functionally identical to HCS300
• Easy to use programming interface
• On-chip EEPROM
• On-chip oscillator and timing components
• Button inputs have internal pulldown resistors
• Current limiting on LED output
• Low external component cost.
ویژگی های ای سی را در موارد بالا مشاهده میکنید رنج تغذیه ای سی که گسترده است
و در بخش رمز نگاری تمامی بخش مانند سریال نامبر و کلید قابل پروگرام است.
نحوه اتصالات و شماتیک راه اندازی ای سی به صورت شکل زیر است(نکته پایه tx به یک مدار نوسان ساز جهت ارسال امواج متصل می شود).
وقتی روی روی ریموت دکمه ای را فعال میکنید اطلاعات به صورت ترتیب زیر از ای سی خارج میشوند
هماهنطور که مشاهده میکنید در هر ارسال دیتا ۶۶ بیت دیتا منتقل میشود که شامل موارد زیر میشود:
- ۲ بیت برای وضعیت های باتری low (یعنی ولتاژ باتری کم شده است ) و تکرار(تکرار یعنی این دکمه نگه داشته شده و دائمنا یک دیتای ثابتی در حال ارسال است).
- ۴ بیت برای وضعیت ۴ دکمه فشرده شده به صورت ۰ و ۱ .
- ۲۸ بیت سریال نامبر(این سریال نامبر برای هر ریموت به صورت یونیک و مخصوص است و توسط پروگرامر روی ic پروگرام می شود)
- ۳۲ بیت دیتای رمز نگاری شده(این دیتای رمز نگاری شده ترکیبی از ۴بیت وضعیت کلید ها و ۱۲ بیت Discrimination bits و یک کانتر ۱۶ بیتی است که توسط الگوریتم keeloq و توسط یک کلید ۶۴ رمز نگاری میشود و ارسال میشود و به دلیل اینکه در هربار فشردن دکمه این کانتر ۱۶ بیتی یک واحد به ان اضافه میشود وقتی ۳۲ بیت دیتا را دریافت کردیم تا زمانی که ان در سمت کد میکرو رمز گشایی نکنیم هیپ استفاده نمیشود از آن کرد و کاملا نامفهوم و بدون ترتیب است)
در ادامه برای اینکه وارد بخش رمز گشایی و کد نویسی بشویم در ابتدا باید این بیت هارا بتوانیم از گیرنده ۴۳۳ مگا هرتزی توسط میکرو دریافت کنیم
گیرنده ۴۳۳ مگاهرتزی سوپر هیترودین:
نحوه خواندن بیت های دریافت شده توسط میکرو:
جهت خواندن بیت های دریافت شده توسط میکرو شما به پین وقفه خارجی حساس به هر دولبه و یک تایمر با شمارش یک میکرو ثانیه ای نیاز دارید.
- اگر میزان high بودن سیگنال به اندازه ۲ تا TE بود یعنی بیت ۰
- اگر میزان high بودن سیگنال به اندازه ۱ تا TE بود یعنی بیت ۱
و اما TE چیست و چند میکروثانیه است در جدول زیر میتوانید ببینید:
در هنگام پروگرام کردن IC شما تعیین میکنید که تایمینگ سطح TE چه مقدار زمانی باشد طبق جدول زیر تعیین می شود:
در ادامه قطعا در محاسبات زمان یک بودن سطح TE خطایی وجود دارد و باید دارای رنج حداقلی و حداکثری باشد که در جدول زیر به آن پرداخته می شود:
پس از اینکه به درستی تمامی بیت های صفر و یک را تشخیص دادید اونهارو در یک ارایه قرار میدید و جهت تفکیک و پردازش رمز گشایی موارد زیر رو اعمال میکنید:
نحوه رمز گشایی کد های دریافتی تحت الگوریتم KEELOQ :
سیستم کدگذاری KeeloQ، از یک کلید ۶۴ بیتی برای رمزگذاری داده استفاده میکند. در واقع پروگرام شدن آی سی به خاطر تنظیم همین کلید است. کاربر میتواند کلید موردنظر خود را برای دادههای ارسالی توسط ریموت تنظیم کند، به صورتی که فقط گیرندهی موردنظر ما که کلید را دارد، قادر به دکد دادههای دریافتی از ریموت باشد.
نحوه عملکرد برنامه باید به صورت زیر باشد:
- در هنگام لرن کردن ریموت : در هنگام لرن کردن شما باید آدرس یا سریال نامبر ریموت را دریافت کرده و پردازش کرده ۲۸ بیت ادرس را در ۴ متغیر ۸ بیتی در ایپرام ذخیره کنید تا برای مقایسه آماده شود.
- در هنگام کار کردن دکمه ها : وقتی که دکمه ای فشرده شد شما باید در ابتدا سریال نامبر رو با موارد سریال نامبر های داخل ایپرام مقایسه کنید اگر برابر بود وارد فاز بعدی و مرحله رمزگشایی میشویم
در مرحله رمز گشایی شما حتما باید کلید ۶۴ بیتی که روی ای سی hcs301 پروگرام کردید را داشته باشید و سپس توسط تابع ۲ ورودی که داریم به ورودی اول کلید ۶۴ را میدهیم و به ورودی دوم عبارت یا عدد رمزنگاری شده ۳۲ بیتی را که توسط میکرو دریافت کرده ایم میدهیم که در این صورت تابع به ما یک عدد ۳۲ بیتی برمیگرداند که ۱۶ بیت کم ارزش کانتر ۱۶ بیتی ما هستش و ۱۶ بیت با ارزش کد رمز گشایی شده هست برای برای یک کلید همیشه ثابت است و در واقع شما با این دوتا مورد رو هم بررسی کنید که یکی اینکه حتما مقدار کانتری یا شمارنده ای که دریافت کردید با مقدار قبلی یکسان نباشد و هم ۱۶ بیت با ارزش که ادرس اصلی رمزگشایی شده هر دکمه هستش در برنامه شما موجود باشد و تعریف شده باشد در واقع با یک شرط این دو مورد را بررسی میکنید و وقتی شرط برقرار شد وارد if میشوید و با بررسی بیت های دکمه ها رله مورد نظر را on و یا off میکنید و همچنین بیت های تکرار و باتری low را هم میتوانبد برای بررسی لمس طولانی دکمه و یا کم بودن میزان باتری در پروژه خود استفاده کنید.
تابع زیر جهت رمزگشایی در برنامه به کار می رود:
نحوه پروگرام کردن و شرح بلوک های ic hcs301 :
EEPROM MEMORY ORGANIZATION
- Key_0 – Key_3 (64-Bit Encryption Key)
- SYNC (Synchronization Counter)
- SER_0, SER_1 (Encoder Serial Number)
- SEED_0, SEED_1 (Seed Word)
- EN_Key (Envelope Encryption Key)
- Configuration Word
۶۴ بیت اول که تشکسل شده از ۴ محل ۱۶ بیتی مخصوص منیوفکچر کد یا کلید ic است که پروگرام می شود.
۱۶بیت بعدی مقدار سینک است که در واقع فاصله زمانی ای است که توسط ما تعیین میشود که در موقع فشرده شدن دکمه دیتا به چه اینتروالی ارسال شوند
۲بایت بعدی که رزرو است
و ۳۲ بیت بعدی سریال نامبر را تشکیل می دهد که ۴ بیت اخر ثابت است و ۱ است چون که سریال نامبر ۲۸ بیت است.
۱۶ بیت بعدی سییید یا seed است که برای لرن کردن پیشرفته و حرفه ای مورد استفاده قرار میگیرد و هم اینکه وقتی شما ۴ دکمه ریموت را به صورت همزمان نگه دارید به جای ۳۲ بیت دیتای رمز نگاری شده ۳۲ بیت دیتای seed که اینجا پروگرام کردیم ارسال میشود(معمولا ۰ است و از بخش لرنینگ پیشرفته استفاده نمیشود)
EN_Key هم یک بیت ابشنال است که میتوانید نحوه رمزنگاری را تغییر دهید(اطلاعات بیشتر در دیتاشیت ای سی موجود است،معمولا کاری بهش نداریم)
Configuration Word هم ۱۶ بیت دیتا است که طبق جدول زیر در ردیف های ۱۳ و ۱۴ و طبق جدول ۳-۳ (چند خط بالاتر) میتوانید زمان TE و دیگر موارد را تغییر بدهید (برای مطالعه موارد دیگر صفحه ۶ دیتا شیت را مطالعه کنید):
فیلم عملکرد برنامه توسط STM32 به صورت زیر است که در پروژه آن موارد زیر انجام شده است:
- دریافت دیتا تحلیل و پردازش آن ها و تفکیک آنها.
- انجام تمامی مراحل رمز گشایی توسط تابع و کلید(Encryption Key ).
- دریافت کانتر ۱۶ بیتی و موقعیت کلید های فشرده شده.
- مانیتور و ارسال تمامی دیتا ها به واحد یوزارت میکروکنترلر و نمایش تمامی اطلاعات به صورت تفکیک شده.
میکرو کنترلر مورد استفاده stm32f103c8t6 است.
باسلام
مطالب فوق برای اولین بار است که در سایت های فارسی زبان، مطرح شده اند، چون من حدود دو ماه است که داشتم دنبال مطالب شبیه این می گشتم،
ممنون و سپاسگذار
سلام، خیلی ممنون از توجه شما، موفق باشید
سلام.مهندس پروژه را قرار نمیدین؟
در صورت امکان در مورد ارسال دیتا RFID بدون استفاده از ماژول وتنها به صورت مستقیم از میکرو هم، مطلب بگذارید.
تشکر از زحمات شما
چشم، باید مداراتی طراحی بشن مشابه عملکرد ماژول، میکرو کنترلر فقط دیتای خروجی رو تحت پروتکل های استانداردی میخواند
باسلام
آی سی HCS301را با چه نرم افزار و سخت افزاری برنامه ریزی می کنید؟
تشکر
نرم افزار رو بنده نوشتم تحت سی شارپ و سخت افزار لازم هم یک میکرو avr هستش
سلام ، با تشکر از اطلاعات بسیار مفیدی که منتشر کردی، یک سوال داشتم چندین روزه دارم تلاش میکنم که این پروژه رو با ESP8266 انجام بدم اما به طور کامل موفق نشدم مشکلم اینجاست که ۳۰،۴۰ بار باید کلید روی ریموت رو بزنم تا پکت ۶۶ بیتی رو کامل دریافت کنم خودم حدس میزنم مشکل از تایمینگ هست کلی باهاش سرو کل زدم و تغیرات دادم و تقریبا تمام سورس هایی که تو نت هست رو تست کردم اما همگی این مشکل رو داشتند شما این پروژه رو با ESP8266/Wemos D1 mini/ NodeMCU انجام دادید؟ به نظرتون مشکل از کجا… Read more »
سلام چیزی که من فکر میکنم و تست کردم اردوینو و esp یکم ضعیف هستن برای محاسبات این کار تتایمر سرعت بالایی میخواد و همچنین وقفه خارجی که کار دقیق و بدون خطا اجرا بشه.
سلام.قرار هست برنامه ریموت هاپینگ را داخل سایت قرار بدهید؟
بله جهت تهیه به زودی قر ار خواهم داد.
سلام، پروژه جالبیه. قبلنا مدت زمان نسبتا زیادی درگیر ریموت code Learn بودم، ولی این چیز جالبتریه. ممنونم از شما
خواهش میکنم پروژه کد لرن هم هست تو سایت پیشنهاد میکنم اموزش و پروژه اش رو ببینید.
عرض سلام و احترام به شما مهندس عزيز
فيلم عملكرد اين پروژه روي سايت قرار نگرفته، ميشه لطفا قرارش بديد؟
و يا اينكه براي بنده فيلمش رو بفرستيد، چون ميخوام باهاش پروژه دانشجوييم رو بسازم و سورس پروژه تون رو خريداري كنم.
سپاسگزارم جناب مهندس
سلام.
به روی چشم به زودی قرار میدم
سلام و احترام
بابا تشكر از مطلب خوب ارسالي آيا نمونه كدي براي پروگرام كردن اييپرام آي سي HCS301 و همچنين رمزگشايي كردن آن كد توسط ميكرو داريد؟
با تشكر از زحمات و راهنمايي شما
سلام خواهش میکنم بله به زودی تمام فایل جهت تهیه قرار خواهد گرفت متاسفانه این روزها بسیار بسیار شلوغم.
سلام
با تشکر از زحمات ولطف شما
فیلم آموزشی وجود ندارد.در آخر آموزش که نوشتید تابع رمزگشایی هم وجود ندارد وفایلهایی را که برای دانلود گذاشتید هرچه میگردم لینکش رو نمیبینم
اگر امکان دارد تکمیل کنید
بازهم از شما تشکر میکنم
سلام من یک پروژه داشتم خواستم ببینم شما میتونید انجام بدید؟
سلام . بله تلگرام پیام بدید صحیت میکنیم
سلام وتشکر بابت سایت آموزشی شما
این یک نرم افزار بنام keeloq tool v2.00.05 نیاز داره که پیداش نکردم
لطفا یه جا آپلود کنید ولینکشو بزارید ممنون میشم
قسمتی از این آموزش که خودتون نوشته بودید ویدئو ویک قسمت دانلود هم هست که کتابخانه یا همچنین چیزی هست وفراموش کردید بزارید
پیشاپیش با تشکر از لطفا شما که نرم افزار رو لینک میدید
سلام.میشه لطف کنید ودرباره کلید ۶۴ بیتی بیشتر توضیح بدید.وقتی دکمه ریموت هاپینگ فشرده میشه ،درسمت گیرنده چطور این کلید رو پیدا کنیم
سلام.سورس پروژه را قرار نمیدین؟
سلام تلگرام پیام بدید راهنماییتون میکنم
@microdroidprj
با سلام خیلی عالی فقط جناب مهندس این مدل ریموت در بازار موجود هست؟ هر جا سرچ کردم پیدا نمیشه
سلام، خواهش میکنم، بله پیدا میشه، منتها ic داخل ریموت خام هست و کد نداره، و شما باید ic رو با کلید ۶۴ بیتی پروگرام کنید و بعد استفاده کنید، که کار سختی نیست
ممنون از راهنماییتون ببخشید در اموزش هاتون این مورد توضیح دادید منظورم پروگرام کردن ایسی هست و ببخشید برا پروگرام کردن نیاز ب پروگرامر خاصی هست؟؟
بله پروگرامرش رو هم طراحی کردم و ساختم، ان شاء الله در آینده توضیحاتی ازش میگذارم
ی سوال دیگه خدمتتون جناب مهندس ببخشید اگه ریموت کسی گم بشه عینا مثل این کد رو میشه داخلش کپی کرد؟؟ و ببخشید میشه چند تا سایت معرفی کنید بر خرید این ریموت
با سلام و احترام ضمن تشکر از زحمات شما مهندس عزیز. من یک کتابخانه برای این ریموت ها نوشته ام که با آردوینو و STM32 کار میکنه و نیازی هم نیست که کد ۶۴ بیتی داخل ریموت پروگرام بشه. خودش از روی اطلاعات دریافتی نامنظمی که دریافت میکنه، سریال نامبر و کد کلید و تکرار و وضعیت باتری رو بهتون میده. حتی کد کلید ها رو بصورت A, B, C, D برمیگردونه. فقط یک سوال داشتم. این کتابخانه که نوشته ام با ریموت های کد هاپینگ درست کار میکنه ولی ریموت های ماشین رو شناسایی نمیکنه. آیا شما در مورد… Read more »
سلام،به خاطر این هست که شما کلید ۶۴ بیتی ریموت های خودرو های مثل ۲۰۶ و سمند که کد هاپینگ هستن و اکثرا برای شرکت سازه پویش هستند رو ندارید،به خاطر همین نمیتونید با ریموت اونها کار کنید