نرم افزار STM32CubeMX رو باز کنید. یک پروژه جدید ایجاد کنید. یک پورت SPI و دو پین خروجی برای و تعریف کنید. با توجه به استفاده از کریستال خارجی 8MHz برای میکروکنترلر؛ ما کلاک داخلی رو، روی 72MHz تنظیم كرديم.
تنظیمات ارتباط SPI
تنظیمات پورت SPI مثل شکل بالا باید باشه (داده 8 بیتی به فرمت MOTOROLA, MSB first,prescaler 8, CPOL=Low, CPHA=1Edge ). توجه داشته باشید با اینکه پورت SPI چهار حالت برای تنظیم پلاریته و لبه کلاک داره؛ اما تراشه ENC فقط حالت اول آن، یعنی پلاریته Low و لبه اول، رو ساپورت (پشتیبانی) میکنه، پس تنظیم SPI فقط در این حالت باید انجام بشه. بیشترین سرعت کلاک پورت SPI که تراشه ENC قادر به دریافت هست، طبق گفته دیتاشیت 20MHz هست؛ در تنظیم مقدار prescaler به این موضوع توجه داشته باشید و در ابتدا از انتخاب سرعت های بالا (جهت کاهش احتمال رخداد خطا) پرهیز کنید.
پروژه رو ذخیره کنید و پروژه رو برای اجرا روی کامپایلر KEIL ایجاد کنید.
اصطلاحات داده (data) ، فریم (frame) ، استریم (stream) ، بسته (packet) فعلا به یک معنی به کار میروند؛ اما در ادامه متوجه میشیم که این کلمات در لایه های خاص استفاده میشن و برای درک بهتر موضوعات، تعریف شده اند.
خب بریم سراغ فریم اصلی اترنت. همونطور که چند خط بالاتر گفتیم؛ ما هر تراشه ای استفاده کنیم؛ باید قادر به ارسال و دریافت فریم های اصلی اترنت باشه. حالا برای اینکه بدونیم این فریم چیه و از چه چیزهایی تشکیل شده یه مقدمه کوتاه از بعضی اصول شبکه بگیم و کار رو ادامه بدیم.
فرض کنید شما میخواهید یک نامه برای کسی ارسال کنید. شرکت پست باید بدونه این نامه، به چه کسی و در کجا تحویل داده بشه؛ لذا شما به یک آدرس یکتا (unique) نیاز دارید که برای هر گیرنده خاص هست. بالطبع فرستنده هم، آدرسی همانند آدرس گيرنده داره. مثلا یک آدرس در حالت كلي اینطوریه: کشور X شهر یا استان Y محله یا منطقه Z خیابان K کوچه M ساختمان با پلاک N و…. وقتي هم که ارسال در داخل يك شهر انجام ميشه، ديگه نياز به آدرس دهي كشور يا شهر نيست و مستقيم ميريم سراغ محله!
به عنوان یک مثال دیگه فرض کنید تصمیم دارید به شخصی تلفن کنید، طبیعتا شخص مورد نظر دارای شماره تلفنی ست که در شبکه تلفن یکتاست (پس خودتون هم از یک شماره یکتا دارید زنگ میزنید).
اینو تا اینجا داشته باشید تا کمی هم از مدل های شبکه براتون بگم. واضحه که ایجاد شبکه های اولیه محصول یک نیاز بود. فرض کنید دانشگاهی می خواست کامپیوترهاش رو به هم متصل کنه تا راحت تر بتونه اطلاعات رو بین اون ها جابجا کنه یا به خاطر کمبود یکسری تجهیزات مثل پرینتر، نیاز بود که اشخاص از کامپیوترهای مختلف، بتونن فایلی رو برای چاپ روی پرینتر مذکور ارسال کنند (قبلا خود پرینتر جابجا می شد یا برای جابجایی فایل ها، نیاز بود حافظه هارد(Hard Disk) از کامپیوتر خارج بشه یا اطلاعات روی فلاپی دیسک ها ریخته بشه و سختی های خودش رو داشت. ضمنا این کارها در فواصل کم امکان پذیر بود). بعد از ایجاد شبکه ها این نیاز مطرح شد که مدل هایی به صورت استاندارد بوجود بیان که هر شبکه ای بر اساس اون ها طراحی بشه تا طراحی و توصیف شبکه راحت تر باشه. این بود که دو مدل برای شبکه؛ یکی با نام OSI(Open Systems Inteconnection) در 7 لایه و دیگری با نام TCP/IP stack یا Internet Protocol Suite در 5 لایه ایجاد شد. خواهیم دید که این دو مدل بسیار به هم شبیه هستند.
قصد نداریم به یکباره تمام این لایه ها رو توصیف کنیم و روال اینطوریه که تک تک این لایه ها رو، روی هم میچینیم تا هم مدلمون تکمیل بشه و هم مفاهیم و پروتکل ها رو یاد بگیریم.
لایه یک که پایین ترین لایه هست لایه فیزیکی نام داره، این لایه هیچ پردازشی انجام نمیده؛ جز اینکه بایت هایی که از لایه دوم دریافت کرده رو بصورت یک جریانی (Stream) از صفر ها و یک ها به سمت مقابل (گیرنده) بفرسته و یا از سمت مقابل یک استریم رو دریافت کنه و اون ها رو بایت به بایت تحویل لایه دوم بده. شکل زیر نمایشی از این عملیات هست. همونطور كه متوجه شديد در اين لايه براي داده ها از کلمه ی “استريم” استفاده ميشه كه به جرياني از بيت ها گفته ميشه.
لایه دوم، تعدادی بایت به لایه اول تحویل میده (اینکه این بایت ها چه اطلاعاتی تو خودشون دارند رو کمی جلوتر میگیم) و لایه اول یعنی لایه فیزیکی، این بایت ها رو به ترتیب دریافت از بیت کم ارزش یعنی LSb ارسال میکنه. لایه دوم اما بایت های یک فریم رو از پر ارزشترین بایت به لایه اول تحویل میده؛ یعنی به صورت MSB (بایت پرارزش اول) . لایه دوم کارش چیه؟ یکسری بایت از لایه سوم میگیره و باید اون ها رو ارسال کنه!
اولین سوال اینه که به کجا ارسال کنه و آدرس مقصد چیه؟ پس مقصد نیاز به یک آدرس داره که در کل شبکه یکتا باشه. بالطبع خودش هم آدرسی از همین نوع داره. طبق استاندارد، در شبکه اترنت؛ این نوع آدرس رو بهش میگن MAC Address . مک آدرس از 6 بایت تشکیل شده و معمول اینه که بصورت هگزادسیمال نمایش داده میشه به این صورت:
0A:55:4C:12:AF:B3 یا 40-AA-00-10-05-D4
همونطور که می بینید برای جدسازی بخش های مختلف آدرس از : یا – استفاده میشه. توجه داشته باشید که 0 ها رو هم حتما بنویسید.
خب این آدرس چیه؟ عملا از دو بخش تشکیل شده، به سه بایت سمت چپ که بایت های پر ارزش هستند اصطلاحا OUI(Organization Unique Identifier) گفته میشه. از طرف سازمان IEEE به شرکت های تولید کننده چیپ های کنترلر اترنت، یک شماره سه بایتی اختصاص داده میشه که در ابتدای مک آدرس قرار میگیره؛ مثلا این شناسه برای شرکت میکروچیپ که تولید کننده ENC هست 00:04:A3 هست. نرم افزارهای شنود (sniffer) شبکه مثل wireshark از این شناسه برای تشخیص شرکت سازنده چیپ کنترلر شبکه استفاده میکنند. سه بایت بعدی، شماره سریال هر چیپ هست. این مجموعه 6 بايتي، بايست در شبكه ما يکتا باشه. این شش بایت، معمولا از طرف سازنده تراشه، درون چیپ نوشته میشن و هر چيپ شماره يا مك آدرس يكتايي داره. اگر هم مثل چیپ ENC براي مك آدرس؛ حافظه خالي گذاشتن و شما بايد مقدار اون رو تعیین کنید؛ باید مراقب باشید که به هر چیپ یک مک آدرس یکتا (Unique) بدید!
خب دوباره برگردیم سراغ لایه دوم شبکه که در مدل OSI بهش Data Link Layer میگن. این لایه علاوه بر 12 بايت شامل مک آدرس ها (6 تا برای گیرنده و 6 تا برای فرستنده)، دو بایت هم برای شناسایی نوع داده هایی که داره ارسال میشه، به ابتدای فریم اضافه میکنه.
همچنین برای بررسی صحت دریافت داده ها در سمت گیرنده؛ در انتهای فریم، چهار بایت برای بازبینی اطلاعات قرار میده. این چهار بایت یک عملیات CRC روی بایت های ارسال شده ست. لایه دوم تنها لایه ای هست که علاوه بر هدر (12 بایت مک آدرس ها و 2 بایت نوع فریم)، فوتری از نوع CRC هم به داده ها اضافه میکنه. به این بخش FCS (Frame Check Sequence) گفته میشه.
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.