Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Irumi

Pages: [1] 2
1
มีข้อสงสัยเกี่ยวกับ GPIOx->OSPEEDR  อยากสอบถามครับ
 คือ OSPEED มีความเกี่ยวข้องกับ System Clock config หรือไม่ครับ ถ้าผมใช้ board stm32d401re nucleo ซึ่ง maximum clock คือ 84MHz ถ้าเลือกใช้ OSPEED = 100MHz จะมีปัญหาไหมครับ

ไม่ได้เกี่ยวข้องกันครับ OSPEEDR จริงๆ แล้วใช้ในการปรับ Slew rate หรือก็คือความเร็วในการเปลี่ยนจาก High ไป Low (tf) หรือ Low ไป High (tr) ของ pin
การเปลี่ยนค่า OSPEEDR มันจะไปปรับเปลี่ยนวงจร Drive ของ Pin โดยการเพิ่ม Speed ก็เป็นการเพิ่มกระแสให้กับวงจร Driver เพื่อให้สัญญาณมันเปลี่ยนแปลงได้เร็วขึ้น
แต่ก็แลกมากับ noise ที่มากขึ้นไปด้วย แต่ถ้าเราปรับ Speed ต่ำ แต่เอา Pin ไปขับสัญญาณถี่มากๆ สัญญาณมันจะเปลี่ยนแปลงไม่ทันนั่นเอง

เลข MHz ที่ระบุมาเป็นความถี่ที่ ST ได้จากการทดสอบ Pin โดยเอา Pin มาต่อ Load ค่าหนึ่งแล้ว Toggle High Low ในความถี่ค่าหนึ่ง แล้วก็วัดเวลา tf + tr เทียบกับคาบของสัญญาณ (T)
ซึ่งความถี่ที่เหมาะสมคือ tf + tr ต้องไม่เกิน (2/3)T และชิปแต่ละ Series ก็จะแตกต่างกันไป ซึ่งดูได้จาก Datasheet แต่เวลาใช้งานจริงก็อาจไม่ได้ผลตามที่ระบุ
เพราะมันมีปัจจัยอื่นเข้ามาเสริมด้วยเช่น ขนาดของ Load ที่ pin ขับอยู่ กับ ระดับแรงดันที่ใช้ เป็นต้น แต่ก็ใช้พอจะใช้เป็นค่าอ้างอิงได้ครับ

ขอบคุณ คุณ dec อีกครั้งครับ ที่ช่วยอธิบายให้เข้าใจ ดังนั้นการ Set ค่า OSPEEDR น่าจะ concern 2 หลักๆ คือ 1. power consumtion ของตัว IC และ ก็ EMC

2
 มีข้อสงสัยเกี่ยวกับ GPIOx->OSPEEDR  อยากสอบถามครับ
 คือ OSPEED มีความเกี่ยวข้องกับ System Clock config หรือไม่ครับ ถ้าผมใช้ board stm32d401re nucleo ซึ่ง maximum clock คือ 84MHz ถ้าเลือกใช้ OSPEED = 100MHz จะมีปัญหาไหมครับ

 

3
  ผมพึ่งจะเริ่มต้น STM32 ครับ ตอนนี้ซื้อ Board STM32F401RE nucleo มาศึกษา
  พอดีสงสัยครับ  ทำไมต้องมีการ set ค่า FLASH->ACR     =    0x00000605;        // จัดเวลา Flash ROM is 5 Wait state
  ถ้าไม่มีคำสั่งนี้จะเกิดอะไรขึ้น
  ไม่แน่ใจจะมีคนตอบรึเปล่าเพราะ กระทู้ตั้งแต่ปี 2013
   
  ขอบคุณครับ

โดยปกติวงจร logic เมื่อเราป้อน input ไป วงจรต้องใช้เวลาเล็กน้อยในการส่งออก output ครับ
ซึ่ง flash memory ก็เป็นลักษณะเดียวกัน แต่ flash memory จะใช้เวลาที่ค่อนข้างนานครับ

เวลา controller จะ อ่านคำสั่งหรือข้อมูลจาก flash memory นั้น controller ก็จะส่ง address ของ
ข้อมูลที่ต้องการอ่านไปให้ flash ทาง address bus พอ flash ได้รับ address แล้ว flash จะส่งข้อมูล
กลับมาให้ทาง data bus ครับ แต่สัญญาณที่ flash ส่งกลับมา มันจะยังไม่เสถียรในทันที controller ต้องรอ
ไปซักระยะหนึ่งให้สัญญาณที่ flash ส่งกลับมาเสถียรก่อน แล้วจึงอ่านข้อมูลจาก data bus ครับ

และหน่วยของเวลาที่ controller มันจะจับเวลาได้มันก็มีแค่จำนวน pulse ของสัญญาณ clock นั้นแหละครับ
5 Wait state ก็หมายถึงรอ 5 Clock Tick ก่อนที่จะอ่านข้อมูลกลับมา

ระยะเวลา Wait state นี้มีหลายปัจจัยครับ หลักๆ 3 ปัจจัยก็คือ

1. เทคโนโลยีของ flash ถ้า flash memory ดีๆ ก็จะส่งสัญญาณให้เสถียรได้เร็ว
    เช่น flash memory ใน STM32H7 ครับ ความถี่ clock สูงถึง 480MHz แต่รอแค่ 2 wait state

2. ความถี่ clock ที่ใช้ในการสื่อสารกับ flash ซึ่งปกติช่วงเวลาที่รอให้สัญญาณเสถียรมันจะคงที่
    แต่ถ้าเราปรับความถี่ clock สูงขึ้น คาบเวลาในแต่ละ clock ก็จะน้อยลง ก็ต้องเพิ่มจำนวน wait state clock

        เช่น flash ต้องใช้เวลา 100ns เพื่อให้สัญญาณเสถียร ถ้าใช้ความถี่ clock ที่ 50MHz จะมีคาบเวลาอยู่ที่ 20ns ต่อ 1 clock
        ก็ต้องรออย่างน้อย 5 wait state ขึ้นไปถึงจะเพียงพอให้สัญญาณจาก flash เสถียร (5*20ns = 100ns)

        แต่ถ้าเราเพิ่มความถี่ clock ไปที่ 100MHz แทน คาบเวลาอยู่ที่ 10ns ก็ต้องรออย่างน้อย 10 wait state ขึ้นไป
        ถึงจะเพียงพอให้สัญญาณจาก flash เสถียร (10*10ns = 100ns)

3. ระดับแรงดันที่ใช้ในระบบ ถ้าแรงดันยิ่งสูงสัญญาณก็จะเสถียรเร็วขึ้นครับ

        ยกตัวอย่าง STM32F401RE ใน Datasheet หน้า 61 ตารางที่ 15
               ถ้าใช้ VDD = 1.8V และความถี่ Clock = 84MHz ต้องรอ 4 wait states ขึ้นไป
               ถ้าใช้ VDD = 3.3V และความถี่ Clock = 84MHz ต้องรอ 2 wait states ขึ้นไป


มาถึงตรงนี้ ก็น่าจะพอเดาได้แล้วว่า ถ้าไม่มีการ set ค่า wait state ให้ถูกต้องจะเกิดผลอะไรหรือไม่

ปกติแล้ว ถ้าผมจำไม่ผิด STM32 แทบทุกตัว จะเริ่มการทำงานด้วยการใช้แหล่งกำเนิดสัญญาณ Clock ภายใน
หรือที่เรียกว่า HSI ซึ่งจะมีความถี่อยู่ที่ 16MHz เสมอ และจะตั้ง wait states ไว้ที่ 0

เวลาที่เราจะทำการ Config Clock เพื่อเปลี่ยนแหล่งกำเนิดสัญญาณ Clock ใหม่ ให้สูงขึ้น เราต้องพิจารณาว่า
ความถี่ใหม่ที่จะใช้นี้ต้องเพิ่ม wait states รึเปล่า ถ้าต้องเพิ่ม wait states  เราต้องทำการปรับ wait states
ก่อนที่จะทำการเปลี่ยนแหล่งกำเนิดสัญญาณ Clock ของระบบ
ไม่เช่นนั้นทันทีที่เปลี่ยนแหล่งกำเนิดสัญญาณ Clock
คำสั่งต่อไปที่ controller ทำการ fetch มาจะผิดไปหมด แล้วก็จะไปจบที่ Hardfault

ถ้าปรับ wait states สูงเกินไป controller ก็ยังทำงานได้ปกติครับ แต่ controller จะเสียเวลาในการรอข้อมูลไปเปล่าๆ
ซึ่งดูเหมือนว่ามันจะน้อย แต่ controller มีการ fetch คำสั่งตลอดเวลา ใน 1 วินาที fetch เป็นล้านครั้ง เมื่อรวมเวลาที่เสียไปมันก็มากอยู่ครับ

ขอบคุณ คุณ dec มากๆเลยครับ กระจ่างเลยครับ :)

4
  ผมพึ่งจะเริ่มต้น STM32 ครับ ตอนนี้ซื้อ Board STM32F401RE nucleo มาศึกษา
  พอดีสงสัยครับ  ทำไมต้องมีการ set ค่า FLASH->ACR     =    0x00000605;        // จัดเวลา Flash ROM is 5 Wait state
  ถ้าไม่มีคำสั่งนี้จะเกิดอะไรขึ้น
  ไม่แน่ใจจะมีคนตอบรึเปล่าเพราะ กระทู้ตั้งแต่ปี 2013
   
  ขอบคุณครับ

5
หา stopwatch ไม่เจอครับ

6
ขอบคุณครับ  :)

7
Hantek DSO5202P vs DSO5202B เลือกตัวไหนดี ครับ ดูจาก Spec แล้วก็ไม่ค่อยต่างกัน
Bandwidths 200MHz
1GSa/S Real time SampleRate

8
Microchip PIC / Re: Programming ET-PIC16/32 START KIT by pickit3
« on: August 06, 2013, 11:52:58 am »
ขอบคุณสำหรับคำแนะนำครับเย็นนี้จะลองทำดู
Thank you very much! :D

Pages: [1] 2