ปัญหาการสื่อสารแฟลชอนุกรมของ Microchip SST26VF064B - JEDEC ID ไม่ถูกต้อง

Aug 19 2020

ฉันกำลังพยายามทดสอบการสื่อสาร SPI กับแฟลชอนุกรม Microchip SST26VF064B และพบปัญหาขณะอ่าน JEDEC ID จากชิป ตามแผ่นข้อมูลสามไบต์แรกควรเป็น 0xBF, 0x26, 0x41 / 0x42 ฉันได้รับข้อมูลที่แตกต่างกันอย่างสิ้นเชิง: 0x7C, 0x20, 0x7F ดูเหมือนว่าชิปจะตอบสนองต่อการอ่านคำสั่ง JEDEC ID 0x9F แต่จะส่งข้อมูลที่ไม่คาดคิดเหมือนกันเสมอ

ฉันได้ลองใช้ไดรเวอร์ SPI ที่ให้มาพร้อมกับ SDK สำหรับ SOC ที่ฉันใช้งานอยู่และยังมี SPI ที่ใช้งานง่าย - ผลลัพธ์ก็เหมือนกันดังนั้นฉันคิดว่าการสื่อสาร SPI ทำงานได้ดี ฉันไม่มีความคิดที่จะลองทำอะไรต่อไป ... มีเหตุผลใดบ้างที่ฉันสามารถรับข้อมูลนี้แทนที่จะเป็น ID ที่คาดไว้?

คำตอบ

1 woytekm Sep 01 2020 at 14:30

ดูเหมือนว่านี่เป็นปัญหาที่ซับซ้อนบางส่วนที่เกี่ยวข้องกับการตอกบัตรและการขาดตัวต้านทานแบบอนุกรมในสาย MISO ในที่สุดปัญหาก็หายไปหลังจากเพิ่มตัวต้านทาน 100ohm บน MISO และตั้งค่าสาย NRF52840 SOC SCLK เป็น "ไดรฟ์สูง" เพื่อให้ขอบนาฬิกาลดลง / เร็วขึ้น

ฉันสงสัยว่าปัญหาของฉันเกี่ยวข้องกับความจริงที่ว่าฉันกำลังทำงานบนเขียงหั่นขนมที่มีสายจัมเปอร์ที่ยาวพอสมควร (10-15 ซม.) เช่นเดียวกับทุกโครงการฉันกำลังพยายามทดสอบส่วนประกอบที่ไม่รู้จักทั้งหมดก่อนที่จะรวมเข้ากับวงจร / PCB แน่นอนว่าเขียงหั่นขนมสามารถและจะแนะนำปัญหาของมันเองและสิ่งนี้อาจเกิดขึ้นที่นี่ แต่ถึงกระนั้นฉันได้ทำงานกับชิป SPI ที่แตกต่างกันเล็กน้อยและฉันไม่เคยพบพฤติกรรมที่ไม่แน่นอนของสัญญาณบนบัสมาก่อน

- ปัญหาแรก: Slave กำลังส่งออกบางสิ่งบน MISO แต่ข้อมูลที่ส่งออกไม่คาดคิด / ผิดพลาด ฉันได้รวมหน้าจอออสซิลโลสโคปไว้ในคำถามเดิมและในคำถามที่สองขยายอีกอันหนึ่งสามารถเห็นการเพิ่มขึ้นเล็กน้อยที่เกิดขึ้นบน MISO ฉันได้ตรวจสอบ spikes เหล่านี้แล้วและดูเหมือนว่าจะเกิดขึ้นเสมอที่ขอบนาฬิกาตกเมื่อทาสควรเปลี่ยนบิตถัดไป:

สีเหลือง - CS, น้ำเงิน - นาฬิกา, สีม่วง - MISO (MOSI จะถูกทิ้งไว้บนหน้าจอเหล่านี้)

ที่ด้านบนของหน้าจอด้านบนเราจะเห็นว่า Slave ตรวจจับการตกของขอบนาฬิกาและ MISO เริ่มสูงขึ้น (เห็นได้ชัดว่าบิตที่อ่านแล้วมีค่าเท่ากับ 1) แต่เมื่อขอบนาฬิกาลดลงช้าลงทาสจะสับสนและปิด MISO ลงด้วยซ้ำ ก่อนที่จะถึงระดับตรรกะ H ที่เหมาะสม (อย่างน้อยนั่นก็คือความเข้าใจของฉันว่าเกิดอะไรขึ้นที่นี่) ประการที่สองหน้าจอด้านล่างใช้สำหรับการเปรียบเทียบเมื่อเปิดใช้งานคุณลักษณะ "ไดรฟ์สูง" ของ nRF52840 SOC บนพิน SCLK ขอบนาฬิกาจะลดลงเร็วขึ้นและ MISO จะทำงานอย่างถูกต้องกับการตั้งค่านี้ - ชิปกำลังส่งออกข้อมูลที่คาดไว้

- ปัญหาที่สอง: สัญญาณ MISO ใช้ได้เมื่อตรวจสอบไม่ได้เชื่อมต่อ หลังจากเชื่อมต่อกับมาสเตอร์แล้วสัญญาณ MISO จะบิดเบี้ยวจนถึงจุดที่มาสเตอร์อ่านไม่ได้หรือไม่มีสัญญาณ MISO เลย

ด้านล่างนี้เป็นพฤติกรรมที่เหมาะสม (ด้วยตัวต้านทาน 100ohm บน MISO, ไดรฟ์สูงที่เปิดใช้งานบน SCLK) - นี่คือชิปแฟลชที่แตกต่างจากคำถามเดิม - ฉันได้เปลี่ยนเป็น Micron MT25QL128ABA แล้ว แต่มันทำงานเหมือนกันทุกประการ ตรวจสอบด้วยต้นแบบที่เชื่อมต่อกับ MISO เหลือง - CS, น้ำเงิน - นาฬิกา, ม่วง - MISO MOSI ถูกทิ้งไว้บนหน้าจอเหล่านี้

ด้านล่างนี้เป็นพฤติกรรมที่ไม่มีตัวต้านทาน - ไม่มีสัญญาณ MISO เลย ตรวจสอบด้วยต้นแบบที่เชื่อมต่อกับ MISO เหลือง - CS, น้ำเงิน - นาฬิกา, ม่วง - MISO MOSI ถูกทิ้งไว้บนหน้าจอเหล่านี้

ฉันพบกระทู้มากมายในฟอรัม Nordic ซึ่งอธิบายถึงปัญหา MISO ที่คล้ายกัน: https://devzone.nordicsemi.com/f/nordic-q-a/47335/problem-using-digital-io-as-miso https://devzone.nordicsemi.com/f/nordic-q-a/47968/spi-doesn-t-work-in-nrf52810-while-emulating-nrf52810-in-nrf52832dk-was-successful/190230#190230

ฉันไม่แน่ใจว่านี่เป็นจุดบกพร่องหรือการกำหนดค่าพิน SOC ที่ใช้สำหรับ MISO ผิดหรือเกี่ยวข้องกับสายบัส SPI แบบยาวในวงจรทดสอบของฉัน จากสิ่งที่ฉันได้อ่าน - ตัวต้านทานสามารถใช้กับบัส SPI เพื่อจับคู่อิมพีแดนซ์ของตัวรับและตัวส่งสัญญาณเมื่อสายไฟ / ร่องรอยยาว (แต่ยาว 10 ซม. เพียงพอที่จะทำให้เกิดปัญหาดังกล่าวหรือไม่) ความจริงก็คือตัวต้านทานค่าที่ค่อนข้างเล็กใน MISO ช่วยได้ที่นี่ ฉันอยากรู้ว่าทำไมถึงเกิดขึ้น แต่ฉันขาดความรู้ระดับต่ำที่มั่นคงเพื่อให้แน่ใจ ฉันจะรวมตัวต้านทานบน MISO บน PCB แต่ฉันจะทดสอบด้วยค่า 0R ก่อนเพื่อดูว่าเงื่อนไขที่ดีกว่าบน PCB (ร่องรอยที่สั้นกว่า) จะทำให้งานนี้ไม่มีความต้านทานเพิ่มเติมหรือไม่