การ์ด SD ในโหมด SPI เกี่ยวข้องกับชิปที่เลือกหรือเลือกทาสหรือไม่? ดูเหมือนจะรีเซ็ตในแอปพลิเคชันของฉัน


9

ฉันมีแอปพลิเคชันที่ฉันมีไมโครคอนโทรลเลอร์ (NXP LPC1343 ) ซึ่งเชื่อมต่อกับFPGAผ่าน SPI 16 บิต นอกจากนี้ยังมีการ์ด SD ที่ใช้พอร์ต SPI เดียวกัน (MISO / MOSI) แต่มีขา CS / SS ที่แตกต่างกัน (ทั้งคู่มีสถานะแอ็คทีฟต่ำ สิ่งหนึ่งที่ฉันต้องทำคือเขียนข้อมูลจาก FPGA ลงในไฟล์บนการ์ด SD โดยใช้FAT32และนี่คืองานของไมโครคอนโทรลเลอร์ ไมโครคอนโทรลเลอร์ใช้FatFSซึ่งฉันทำงานได้อย่างน่าเชื่อถือ

เนื่องจากไมโครคอนโทรลเลอร์มี RAM เพียงเล็กน้อยเท่านั้นจึงสามารถบัฟเฟอร์ข้อมูลเพียงเล็กน้อยได้ในครั้งเดียว ดังนั้นไมโครต้องอ่านบัฟเฟอร์จาก FPGA เปลี่ยนโหมด SPI เป็น 8 บิตแล้วเขียนข้อมูลนั้นไปยัง FATFS โปรดจำไว้ว่าในการกำหนดค่าการ์ด SD สำหรับโหมด SPI คำสั่งจะต้องส่งในขณะที่บัส SPI ทำงานที่ 400 kHz และการรอคอยจำนวนหนึ่งจะต้องเกิดขึ้น ดังนั้นฉันต้องการที่จะดำเนินการเริ่มต้นเพียงครั้งเดียว

อย่างไรก็ตามการทำธุรกรรมใน FPGA แม้ในขณะที่ถือ CS high บนการ์ด SD ดูเหมือนว่าจะใส่การ์ด SD เข้าสู่สถานะแปลก ๆ ซึ่งจะต้องผ่านการเริ่มต้นอีกครั้ง หลักสูตรนี้ไม่เป็นที่พึงปรารถนาเนื่องจากการเริ่มต้นอาจใช้เวลาหลายมิลลิวินาทีเพื่อเขียนข้อมูลเพียง 4 kB หรือมากกว่านั้น (ถูก จำกัด ด้วยความสามารถของ RAM ขนาดเล็กของไมโคร) เมื่อฉันต้องการเขียนหลายเมกะไบต์อย่างเร็วที่สุดสิ่งนี้จะลดประสิทธิภาพจากประมาณ 500 kB / s เป็นน้อยกว่า 100 kB / s

ฉันทราบว่าการ์ด SD ไม่ได้เป็นไปตามมาตรฐาน SPI อย่างสมบูรณ์ แต่จะแก้ไขปัญหานี้ได้อย่างไร


มันควรให้เกียรติเท่าที่ฉันรู้ อาจลองใช้การ์ด SD อื่น
Marko

นี่เป็นคำถามที่ยอดเยี่ยม ขอขอบคุณที่สอบถาม (และตอบรับ)
เครื่องหมาย

คำตอบ:


7

โอเคฉันคิดออกจริง ฉันควร googled ลึกลงไปเล็กน้อย ปรากฎว่าการ์ด SD ไม่ทำหน้าที่เหมือนกับอุปกรณ์ SPI เมื่อแชร์บัสตามวิธีการใช้ MMC / SDC :

ในบัส SPI อุปกรณ์สลาฟแต่ละอันจะถูกเลือกด้วยสัญญาณ CS แยกและอุปกรณ์พหูพจน์สามารถเชื่อมต่อกับบัส SPI ได้ อุปกรณ์ทาส SPI ทั่วไปขับ / ปล่อยสัญญาณ DO ด้วยสัญญาณ CS แบบอะซิงโครนัสเพื่อแชร์บัส SPI

อย่างไรก็ตามไดรฟ์ MMC / SDC / ปล่อยสัญญาณ DO ในการซิงโครไนซ์กับ SCLK ซึ่งหมายความว่ามีความเป็นไปได้ของความขัดแย้งของบัสกับ MMC / SDC และทาส SPI อื่น ๆ ที่ติดอยู่กับบัส SPI ภาพด้านขวาแสดงเวลาขับ / การเปิดตัวของ MMC / SDC (สัญญาณ DO จะถูกดึงไปที่ 1/2 V ccเพื่อดูสถานะบัส) ดังนั้นเพื่อให้สัญญาณ DO ที่ปล่อย MMC / SDC อุปกรณ์หลักต้องส่งไบต์หลังจากสัญญาณ CS ถูกปิดใช้งาน

การ์ด SD และ FPGA อาจทั้งพยายามขับ DO และการ์ด SD หายไปดังนั้นจึงรีเซ็ต การส่งไบต์พิเศษดูเหมือนจะแก้ไขแล้ว


มันช่วยให้คุณสลับกันระหว่าง FPGA กับการ์ดได้ไหม? คุณพบว่าคุณสามารถขัดจังหวะระหว่างการถ่ายโอนข้อมูลและดำเนินการต่อหรือไม่ จากสิ่งที่กล่าวไว้ใน elm-chan ดูเหมือนว่ามันเป็นไปไม่ได้ แต่ฉันสนใจที่จะรู้ว่าคุณยืนยันหรือหักล้างมัน
krs013

1
ใช่มันทำงานได้อย่างที่คาดไว้สำหรับการสลับระหว่าง FPGA และ SD แต่คุณไม่สามารถขัดขวางการถ่ายโอนระหว่างการเรียกไปยัง FatFS อย่างน้อยฉันก็ไม่สามารถทำงานได้ นั่นหมายความว่าคุณไม่สามารถตอบสนองต่อการขัดจังหวะระหว่างการเขียนและอ่านไฟล์จากเซ็นเซอร์โดยใช้บัส SPI ที่ใช้ร่วมกัน
Zuofu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.