ฉันมีแอปพลิเคชันที่ฉันมีไมโครคอนโทรลเลอร์ (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 อย่างสมบูรณ์ แต่จะแก้ไขปัญหานี้ได้อย่างไร