آموزش ARM, کارگاه آموزشی

راه اندازی کتابخانه LWIP با STM32 (بخش اول)

فهرست مطالب

LWIP یک کتابخانه رایگان TCP/IP است که توسط Adam Dunkels در موسسه علوم کامپیوتر سوئد توسعه داده شده است. تمرکز پیاده سازی LwIP در جهت کاهش استفاده از RAM  و درعین حال داشتن یک نسخه کامل از مدل TCP/IP  است. این امر باعث می­شود LwIP برای کاربردهایEmbedded  بسیار مناسب باشد.

LWIP از پروتکل‌­های زیر پشتیبانی می­‌کند:

  • IPv4 and IPv6 (Internet Protocol v4 and v6)
  • ICMP (Internet Control Message Protocol) for network maintenance and debugging
  • IGMP (Internet Group Management Protocol) for multicast traffic management
  • UDP (User Datagram Protocol)
  • TCP (Transmission Control Protocol)
  • DNS (Domain Name Server)
  • SNMP (Simple Network Management Protocol)
  • DHCP (Dynamic Host Configuration Protocol)
  • PPP (Point to Point Protocol)
  • ARP (Address Resolution Protocol)

LwIP  دارای سه رابط کاربردی زیر است:

  • Raw API: این API ساده‌­ترین حالت از LWIP است. عملکرد آن بصورت فراخوانی توابع Callback متناسب با هر رویداد است. این API بهترین عملکرد و اندازه کد بهینه سازی را فراهم می­‌کند، اما باعث پیچیده­ شدن توسعه نرم افزار می‌­شود.
  • Netconn API :Netconn API یک API با ترتیب زمانی سطح بالا است که نیاز به یک سیستم عامل real-time دارد. API Netconn عملیات multithreading را نیز فعال می­‌کند.
  • BSD Socket API: این API مدلی توسعه یافته از Netconn API است.

در رابط کاربری نوع اول استفاده از سیستم عامل اختیاری است، اما در نوع دوم و سوم حتماً باید از سیستم عامل استفاده نمود.

معماری LWP

LWIP  با معماری مدل TCP/IP مطابقت دارد که مشخص می­‌کند چگونه باید داده­‌ها را فرمت، انتقال، مسیردهی و دریافت کرد تا ارتباطات end-to-end ارائه شود.

این مدل شامل چهار لایه انتزاعی است که برای مرتب‌سازی همه پروتکل‌­های مرتبط با شبکه مورد استفاده قرار می­‌گیرد (شکل 12). از پایین­ترین تا بالاترین لایه‌­ها عبارت­‌اند از:

لایه پیوند: شامل فناوری­‌های ارتباطی برای یک شبکه محلی.

لایه اینترنت (IP): شبکه‌­های مستقل را متصل و درنتیجه اینترنت را متصل می‌­کند.

لایه حمل ونقل: ارتباطات میزبان – میزبان را مدیریت می‌کند.

لایه برنامه: حاوی تمام پروتکل­‌ها برای خدمات ارتباطات داده است.

ساختار کتابخانه LwIP
ساختار کتابخانه LWIP

نحوه تنظیم پورت ETH در نرم افزار STM32CubeMX در میکروکنترلرهای سری STM32F7

برای تنظیم پورت Eth در نرم افزار STM32CubeMX  ابتدا بر روی واحد ETH کلیک کنید تا پنجره ETH Mode and Configuration باز شود. سپس در قسمت Mode حالت مورد نظر را انتخاب کنید. در اینجا حالت RMII انتخاب شده است. لازم به ذکر است که حتما بررسی شود که پایه‌­هایی که STM32CubeMX انتخاب می‌­کند با سخت افزار مورد استفاده مطابقت داشته باشد. سپس در قسمت Configuration سربرگ Parameter Settings فیلد PHY Address را با توجه به وضعیت پایه PHYAD0 آی­سی PHY بر روی سخت‌افزار تنظیم کنید.

شماتیک لایه فیزیکی بورد استفاده شده در این پروژه، در شکل 2 نشان داده شده است. همانطور که ملاحظه می­‌کنید، پایه PHYAD0 به زمین متصل شده است. لذا مقدار فیلد PHY Address را صفر قرار داده شده است.

شماتیک آی¬سی Tranciever در بورد STM32f746Discovery
شماتیک آی سی Tranciever در بورد STM32f746Discovery

فیلد Ethernet MAC Address آدرس MAC را مشخص می­‌کند. سایر موارد را می­‌توان با مقادیر پیش­فرض رها کرد.

در شکل 14 نحوه تنظیم پورت ETH نشان داده شده است :

نحوه تنظیم پورت Eth در نرم افزار STM32CubeMX
نحوه تنظیم پورت Eth در نرم افزار STM32CubeMX

نحوه تنظیم LWIP در نرم افزار STM32CubeMX

این کتابخانه نیز همچون سایر کتابخانه­‌ها نیاز به تنظیمات اولیه دارد. برای استفاده از کتابخانه LWIP ابتدا باید در قمست Mode فعال شده باشد. در قسمت Configuration تنظیمات کلی LWIP و هر یک از پروتکل­‌های آن انجام می­‌شود.

جهت تخصیص استاتیک IP در سربرگ General Settings فیلد LWIP_DHCP را بر روی Disabled قرار دهید. سپس در قسمت IP Address Settings، آدرس IP و Mask را تنظیم کنید. برای تخصیص IP بصورت دینامیک فیلد LWIP_DHCP را بر روی Enabled تنظیم نمایید. در این پروژه از حالت استاتیک استفاده شده است. در شکل  15 نحوه تنظیم کتابخانه LWIP نشان داده شده است. سایر تنظیمات کتابخانه LWIP را با مقادیر پیشفرض‌شان رها کنید.

نحوه تنظیم کتابخانه LwIP در نرم افزار STM32CubeMX
نحوه تنظیم کتابخانه LwIP در نرم افزار STM32CubeMX

در شکل  16 نحوه تنظیم کلاک نشان داده شده است.

نحوه تنظیم کلاک در نرم افزار STM32CubeMX
نحوه تنظیم کلاک در نرم افزار STM32CubeMX

پس از انجام تنظیمات فوق به سربرگ Project Manager رفته و پس از تعیین نام، مسیر ذخیره و IDE موردنظر بر روی دکمه GENERATE CODE کلیک کنید تا نرم افزار STM32CubeMX پروژه اولیه ایجاد شود.

نرم افزار برنامه

در این قسمت برنامه ساده‌­ای جهت تست Ethernet نوشته شده است. کد برنامه بصورت زیر است.

				
					
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */
  

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_LWIP_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    MX_LWIP_Process();
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

				
			

نتیجه برنامه

در این پروژه میکروکنترلر با پورت Ethernet به کامپیوتر وصل شده است و هیچگونه سوئیچ و Router و … وجود ندارد. برای این منظور ابتدا باید کارت شبکه تنظیم شود. در شکل ** نحوه تنظیم IP کارت شبکه نشان داده شده است. لازم به ذکر است که هر دو Node باید Subnet mask یکسانی داشته باشند.

نحوه تنظیم IP کارت شبکه
نحوه تنظیم IP کارت شبکه

در صورتیکه­ تنظیمات فوق را به درستی انجام داده باشید، باید کامپیوتر و میکروکنترلر با هم Ping داشته باشند. همانطور که در شکل  18 مشاهده می‌­شود، کامپیوتر و میکروکنترلر نسبت به هم Ping دارند.

خروجی دستور ping
خروجی دستور ping

نظرتان را درباره این مقاله بگویید 28 نظر

راه اندازی کتابخانه LWIP با STM32 (بخش اول)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

یازده + هفت =