สำหรับคนที่ใจร้อนคุณสามารถข้ามพื้นหลังได้
พื้นหลัง
ฉันกำลังเขียนโปรแกรมชุดไมโครคอนโทรลเลอร์ที่สื่อสารกับ SPI มีเจ้านายและn
ทาสหนึ่งคนที่แชร์รถบัส ไม่มีการเลือกชิป (ไม่ใช่การออกแบบที่ไม่ดี แต่n
มีขนาดใหญ่และมีพื้นที่ไม่เพียงพอสำหรับn
บรรทัดเพิ่มเติม)
ดังนั้นจึงเป็นความรับผิดชอบของพวกทาสที่จะรักษามิโซะของพวกเขาไว้ในอิมพีแดนซ์สูงและพวกเขาส่วนใหญ่พูด สิ่งนี้ทำได้โดยการตอบกลับเฉพาะเมื่อมีการลงคะแนน id
ตอนนี้เราต้องการที่จะมีขั้นตอนการค้นพบครั้งแรกที่อาจารย์ค้นพบทาสที่มีรหัสที่แนบมากับมัน เพื่อให้ชีวิตง่ายขึ้น (ในบางแง่มุม) เราต้องการมี id ที่ไม่ซ้ำกัน (และเช่น 32 บิต) สิ่งนี้ทำให้เป็นไปไม่ได้ที่อาจารย์จะหยั่งเสียงรหัสต่อหนึ่งและดูว่าใครตอบกลับ (มีความเป็นไปได้มากเกินไป)
เพื่อแก้ปัญหานี้ฉันได้วางแผนการค้นหาแบบไบนารีที่ทาสตอบสนองโดยรวมและต้นแบบสามารถค้นหารหัสขั้นต่ำได้อย่างรวดเร็ว ทาสที่มี ID นั้นจะถูกบอกว่าจะไม่เข้าร่วมอีกต่อไปและอัลกอริทึมจะทำซ้ำ (รายละเอียดที่ไม่สำคัญ)
แม้ว่าจะมีปัญหาอย่างหนึ่ง การตอบกลับแบบรวมจำเป็นต้องเป็นตรรกะหรือ (หรือตรรกะ AND) ของการตอบกลับทั้งหมด ฉันได้รับแจ้งว่าสามารถกำหนดค่าสายในลักษณะที่บัส MISO สามารถทำหน้าที่เป็นตรรกะหรือ สิ่งที่ฉันบอกคือ:
- ตั้งค่า MISO เป็น master เป็น Pull-up และ
- ตั้ง MISO บนทาสทุกคนเป็นแบบเปิด
ฉันเคยลองมาแล้ว แต่ถึงแม้จะเป็นแค่ทาสคนเดียวการปรับแต่งนี้ก็ใช้ไม่ได้ (ออสซิลโลสโคปแสดงค่าคงที่เป็นศูนย์ในบรรทัด) ถ้าฉันกำหนดค่า MISO บนต้นแบบเป็นอินพุตความต้านทานสูงฉันจะเห็นว่าออสซิลโลสโคปนั้นแรงดันไฟฟ้าลดลงเหลือครึ่งซึ่งบิตของเอาต์พุตจากทาสสองตัวนั้นแตกต่างกัน
หมายเหตุ: การกำหนดค่า MISO ให้กับมาสเตอร์เป็นอิมพีแดนซ์สูงและทาสแต่ละตัวเป็นแบบกดดึงฉันสามารถพูดคุยกับแต่ละคนได้แม้ว่าจะมีพวกเขาอยู่บนรถบัสเดียวกันก็ตาม ฉันหมายถึงฉันสงสัยว่ามันเป็นปัญหาของเส้นตรง
คำถาม
คำถามของฉันคือถ้าเป็นไปได้และถ้าเป็นเช่นนั้นฉันจะกำหนดค่าหมุดอินพุตและเอาต์พุตของต้นแบบและทาสได้อย่างไรเพื่อให้สาย MISO ที่ใช้ร่วมกันทำหน้าที่เป็นตรรกะ OR (หรือตรรกะ AND)
แก้ไข
ปรากฎว่ามันกลายเป็น OR ด้วยตรรกะเชิงลบจริง (โดยทั่วไปคือ AND)
ปัญหาของบ่าวคนเดียวได้รับการแก้ไขโดยการเขียน 1 ไปที่ขาดึงขึ้นบนต้นแบบ ก่อนหน้านี้มีสถานะเริ่มต้นเป็น 0
แก้ไข 2
กลายเป็นทาส ST แทนที่การตั้งค่า GPIO ของ MISO ของฉันเป็น open-drain และถูกบังคับให้สูงเมื่อมีคนเขียน ฉันตัดสินใจปิดปาก SPI และส่งมอบ MISO ในกรณีนี้ด้วยตนเอง