STM32 Ethernet #1. Connection

Started by tha, February 17, 2022, 07:33:14 AM

Previous topic - Next topic

tha

แปลแบบเดิมมันคงจะไม่เวิร์คเพราะมากมายเกินไป จำไม่ไหวหรอก จะใช้ก็เจาะเป็นเรื่องๆเอา ภาษาอังกฤษสั้นๆคงจะพอแปลกันได้นะครับ
เดี๋ยวจะมาแปลนี่เลย ตัวอย่างเขา Ethernet เป็น M7 แต่เรามาแก้เป็น M3(STM32F107VC) ได้ไม่อยาก ตัวที่มี ETH (อีเทอร์เน็ต) ใน CubeMX จะมีให้เซ็ตอยู่ พร้อม LwIP ด้วย

https://controllerstech.com/stm32-ethernet-1-connection/

น่าจะเวิร์คนะ เขาคงจะไม่ว่าอะไรนะ ขอขอบคุณเขามา ณ ที่นี้ด้วยครับ ท่านใดพอจะมีทรัพย์ก็บริจาคเขาด้วยนะครับ ฟังภาษาอังกฤษเขาในยูทูบก็ฟังง่ายดีครับ

tha

STM32 Ethernet #1. Connection

บทช่วยสอนนี้เป็นจุดเริ่มต้นของ the Ethernet series ใน STM32. วันนี้เราจะมาดูวิธีกำหนดค่า the Hardware.

สำหรับ MCU บางตัว การดำเนินการนี้จะง่ายพอๆ กับการตั้งค่าเริ่มต้น แต่สำหรับตัวอื่นๆ ส่วนนี้อาจซับซ้อนมาก โดยเฉพาะ MCU ของ Cortex M7 Series ซึ่งพื้นที่ที่แคชได้(the cacheable region)ทำให้เกิดปัญหาการเชื่อมโยงกันของข้อมูล

ดังนั้นผมจะพยายามอธิบายกระบวนการนี้ให้ดีที่สุด เพื่อให้เข้าใจผลลัพธ์ของการตั้งค่าต่างๆได้ดีขึ้น เราขอแนะนำให้คุณดูวิดีโอที่ส่วนท้ายของโพสต์นี้

tha

                                                         CubeMX Configuration

Ethernet Configuration

มีชนิดของการกำหนดค่ามากมายมีให้ใช้ประโยชน์กับ MCUs ที่แตกต่างกัน. บาง MCUs ยอมให้คุณกำหนดค่า the memory ใน the CubeMX, ในขณะที่บางตัวไม่สามารถทำได้. บาง the Boards มี the MII Hardware, ในขณะที่บอร์ดอื่นๆ มี RMII.

ด้านล่างเป็นรูปภาพของการกำหนดค่าที่เป็นไปได้สองแบบ (จากหลายแบบ)





tha

•  The LEFT hardware ใช้ the RMII pinout, ในขณะที่ the RIGHT อีกตัวกำลังใช้ MII pinout.

•  บน the LEFT one เรามี the option ในการเลือก the PHY Address. นี้ควรถูกเซ็ตเป็น 0, ถ้าคุณกำลังใช้ the on board LAN
    Port, และมันควรเป็น 1 ในกรณีของ the external module.

•  บน the RIGHT side, the MCU ยอมให้เรากำหนดค่า the memory สำหรับ DMA descriptors, และ the Rx Buffer

•  สมมติเอาว่า DMA Descriptor แต่ละตัวใช้ 32 บิต (สูงสุดที่เป็นไปได้) RX Descriptor และ Tx Descriptor จะมีขนาด 128 ไบต์
   (32×4)

•  หน่วยความจำระหว่างพวกมันจะถูกเว้นระยะห่างสอดคล้องกัน

•  The Rx Buffer มีขนาดเท่ากับ 1524×4 (Rx DMA Descriptor Length).

•  The memories ถูกจัดสรรใน the SRAM region, ซึ่งเราสามารถแก้ไขคุณสมบัติได้ในภายหลังใน MPU.

tha

LWIP Configuration

The LightWeight IP สามารถถูกเปิดใช้งานใน the middleware section. ถ้า the MCU ไม่ยอมให้คุณเปิดใช้งานมัน, ทำให้แน่ใจว่า the cache (DCache and ICache) ถูกเปิดการใช้งาน.

การกำหนดค่าส่วนใหญ่ใน LWIP ยังคงเหมือนเดิม ยกเว้น MCU บางตัวให้เราเลือก the address สำหรับ Heap




tha

•  ที่นี่เราจะปิดการใช้งาน  the DHCP, และกำหนดค่า a static IP สำหรับ ethernet module ของเรา.

•  บน the RIGHT, ผมกำลังใช้ 10KB memory สำหรับ the Heap.

•  10 KB นี้เพียงพอสำหรับบางแอปพลิเคชันของเราในตอนเริ่มต้น ต่อมาเราจะเพิ่มมันหากจำเป็น

•  นอกเหนือจากนี้ MCU บางตัวจะอนุญาตให้แก้ไขตำแหน่งสำหรับ Heap นี้

• ตำแหน่งอยู่ที่ offset (เพิ่มไปอีก) 0x2000 ใน SRAM และการคำนวณสำหรับเหมือนกันแสดงอยู่ด้านล่าง



                                                     2000
RAM Mem Pointor             0x300018D0
                                                1524x4 = 6096
Rx buffer                          0x30000100
                                                  +128b
Tx Descriptor                    0x30000080
                                                  +128b
Rx Descriptor                    0x30000000

tha

MPU Configuration

ตอนนี้เรามี the DMA Descriptors ใน the SRAM Region. และนี่คือเหตุผลที่เราต้องกำหนดค่า the MPU.

ถ้า MCU ของคุณไม่อนุญาตให้คุณเลือก the memory region, แสดงว่าคุณไม่จำเป็นต้องทำ แต่สำหรับตัวอื่นๆ นี่เป็นสิ่งจำเป็น มิฉะนั้น คุณจะได้รับ hardfault.

โปรดจำไว้ว่าในระหว่างการกำหนดค่า เราตั้งค่าทุกอย่างใน SRAM (0x30000000) ขนาดรวมของ RAM อยู่ที่ประมาณ 18 KB ดังนั้นเราจะกำหนดค่า MPU โดยคำนึงถึงข้อมูลนี้


tha

•  ที่นี่เราได้เลือก the 32 KB region, เนื่องจากเป็นขนาดที่น้อยที่สุดที่มีให้ใช้ประโยชน์หลัง 16 KB. และ region ของเราคือ 18 KB.

•  การกำหนดค่าที่เหลือคือการเซ็ต the region เป็น non-cacheable region.

•  ซึ่งจะช่วยป้องกันปัญหาความสัมพันธ์กันของ cache ระหว่าง CPU และ DMA

•  สิ่งนี้ถูกอธิบายไว้ใน the cortex M7 playlist, ดังนั้นโปรดตรวจสอบ.