ขณะนี้ฉันกำลังทำงานเกี่ยวกับโครงการ I2C EEPROM โดยใช้การทุบบิตเพื่อขับ SDA และ SCL
ฟังก์ชั่นการอ่านของฉันทำงานได้ดี แต่เมื่อใดก็ตามที่ฉันเขียนไบต์ใด ๆ ด้วย "1" นำหน้าฉันจะอ่าน FF ย้อนกลับเสมอ แม้ว่าไบต์จะถูกโปรแกรมด้วยอย่างอื่นมาก่อน นำ "0" สมบูรณ์แบบ มันไม่ใช่รูทีนการอ่านของฉัน อย่างที่ฉันเห็นในขอบเขตมันจะคืนค่า FF
ฉันกำลังมองหาคำแนะนำเกี่ยวกับสาเหตุที่อาจเป็นเช่นนี้ มีอะไรที่ชัดเจนหรือไม่ที่ฉันอาจคิดถึงซึ่งอาจทำให้เกิดปัญหาได้ [ฉันไม่สามารถโพสต์รหัสได้ - บริษัท เป็นความลับ ... :(]
ทุกรูปคลื่นที่ฉันดูตรงตามสเปคอย่างแน่นอน ฉัน decoupling EEPROM pull ups ของฉันคือ 2.2k ดังนั้นภายในสเป็ค ฉันกำลังตอกบัตรอยู่ที่ประมาณ 500 Hz ในต้นแบบนี้ ชิปกำลังส่ง ACK ไปยังแต่ละไบต์ของฉันดังนั้นจึงรับรู้ได้ แต่มันไม่ทำงาน ...
อัลกอริทึมการเขียนที่ง่ายขึ้นสำหรับหนึ่งไบต์:
wait
SDA low
SCL low
wait
for each bit
if bit is set: SDA high
if bit is unset: SDA low
wait
SCL high
wait
wait
SCL low
wait
wait
SDA high
SCL high
wait
wait
check ACK status
SDA low
SCL low
wait
return ACK status
อัลกอริทึมการอ่านที่ง่ายขึ้นสำหรับหนึ่งไบต์:
wait
SCL low
SDA high
for each bit (8 bits)
SCL high
wait
wait
SCL low
wait
check and store received bit
wait
do a NACK or ACK depending on if it is the last byte