فهرست مطالب
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): شبکههای مستقل را متصل و درنتیجه اینترنت را متصل میکند.
لایه حمل ونقل: ارتباطات میزبان – میزبان را مدیریت میکند.
لایه برنامه: حاوی تمام پروتکلها برای خدمات ارتباطات داده است.
نحوه تنظیم پورت ETH در نرم افزار STM32CubeMX در میکروکنترلرهای سری STM32F7
برای تنظیم پورت Eth در نرم افزار STM32CubeMX ابتدا بر روی واحد ETH کلیک کنید تا پنجره ETH Mode and Configuration باز شود. سپس در قسمت Mode حالت مورد نظر را انتخاب کنید. در اینجا حالت RMII انتخاب شده است. لازم به ذکر است که حتما بررسی شود که پایههایی که STM32CubeMX انتخاب میکند با سخت افزار مورد استفاده مطابقت داشته باشد. سپس در قسمت Configuration سربرگ Parameter Settings فیلد PHY Address را با توجه به وضعیت پایه PHYAD0 آیسی PHY بر روی سختافزار تنظیم کنید.
شماتیک لایه فیزیکی بورد استفاده شده در این پروژه، در شکل 2 نشان داده شده است. همانطور که ملاحظه میکنید، پایه PHYAD0 به زمین متصل شده است. لذا مقدار فیلد PHY Address را صفر قرار داده شده است.
فیلد Ethernet MAC Address آدرس MAC را مشخص میکند. سایر موارد را میتوان با مقادیر پیشفرض رها کرد.
در شکل 14 نحوه تنظیم پورت ETH نشان داده شده است :
نحوه تنظیم LWIP در نرم افزار STM32CubeMX
این کتابخانه نیز همچون سایر کتابخانهها نیاز به تنظیمات اولیه دارد. برای استفاده از کتابخانه LWIP ابتدا باید در قمست Mode فعال شده باشد. در قسمت Configuration تنظیمات کلی LWIP و هر یک از پروتکلهای آن انجام میشود.
جهت تخصیص استاتیک IP در سربرگ General Settings فیلد LWIP_DHCP را بر روی Disabled قرار دهید. سپس در قسمت IP Address Settings، آدرس IP و Mask را تنظیم کنید. برای تخصیص IP بصورت دینامیک فیلد LWIP_DHCP را بر روی Enabled تنظیم نمایید. در این پروژه از حالت استاتیک استفاده شده است. در شکل 15 نحوه تنظیم کتابخانه LWIP نشان داده شده است. سایر تنظیمات کتابخانه LWIP را با مقادیر پیشفرضشان رها کنید.
در شکل 16 نحوه تنظیم کلاک نشان داده شده است.
پس از انجام تنظیمات فوق به سربرگ 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 یکسانی داشته باشند.
در صورتیکه تنظیمات فوق را به درستی انجام داده باشید، باید کامپیوتر و میکروکنترلر با هم Ping داشته باشند. همانطور که در شکل 18 مشاهده میشود، کامپیوتر و میکروکنترلر نسبت به هم Ping دارند.