واحد I2C بهدرستی مقداردهی اولیه (Initialize) میشود، اما پارامتر مورد نظر از Slave دریافت نمیشود.
از سمت سختافزار، پایههای SCL و SDA را طبق عکس ارسالی روی پایههای 41 و 42 تنظیم کردهام و برای تطبیق سطح ولتاژ از یک Bidirectional Logic Level Converter استفاده کردهام. همچنین، سیگنالهای I2C را با اسیلوسکوپ بررسی کردم و پالسهای مناسب را در دو طرف (Master و Slave) مشاهده کردم، اما همچنان پاسخی دریافت نمیشود.
همچنین از سمت نرمافزار، همین آدرس و رجیستر را در واحد I2C یک میکروکنترلر STM32 تست کردم و پاسخ از Slave بهدرستی دریافت شد، اما در ماژول EC200U با استفاده از کدهای بالا، هیچ پاسخی از Slave دریافت نمیکنم.
مشکل از کجاست؟ آیا نکتهای در استفاده از I2C در این ماژول وجود دارد که رعایت نکرده باشم؟
سلام.
من اول پین رو کانفیگ میکنم
ql_pin_set_func
بعد
ql_I2cInit
برای ارسال داده
ql_i2c_write_slave_data
من متوجه نشدم چرا read کردید.
یک سوال هم دارم. آیا با ST هم از Bidirectional Logic Level Converter استفاده کردید؟
سطح ولتاژتون روی ماژول I2C چنده؟ دوطرف آی سیتون رو چک کردید؟
نهایتا بنظرم بجای اسیلوسکوپ از لاجیک آنالایزر استفاده کنید تا متوجه بشید پیامش چیه
امیدوارم مفید باشه
سلام دوست عزیز
در کتابخونه i2c_demo.c برخلاف کتابخونه های دیگر من چیزی به عنوان کانفیگ پین ندیدم در کتابخانه دمو spi مثلاً پایه CS را به صورت زیر کانفیگ کرده : ql_pin_set_func(QL_CUR_SPI_CS_PIN, QL_CUR_SPI_CS_FUNC)
اما برای i2c در کتابخانه دمو چیزی به اسم QL_CUR_I2C_SCL_PIN نداره که کانفیگ شود در کتابخونه i2c_demo.c تنها کانفیگ های قبل از ql_I2cInit مربوط به camera بودن که من آن ها را کامنت کردم
//ql_CamInit(320, 240);
//ql_CamPowerOn();
در ابتدا init را مطابق کد زیر انجام دادم ql_I2cInit(i2c_1, STANDARD_MODE);
بعد از آن read را مطابق دستور زیر انجام دادم ql_I2cRead(i2c_1, ADDRESS, REGISTER, &check, 1);
برای سوال شما که چرا read کردید من میخواهم دیتا را از slave بخونم ماژول من MPU6050 هست و میخواهم در ابتدا مقدار رجیستر who am i ماژول را بخوانم. وقتی read اولیه انجام نمیشه پس write هم انجام نمیشه.
خیر با st از Bidirectional Logic Level Converter استفاده نکردم و پایه های scl و sda مستقیم به ماژول slave متصل بودند.
سطح ولتاژ در طرف ماژول EC200U کوکتل 1.8 ولت هست و برای ماژول MPU6050 وقتی تغذیه pull up مدار logic converter در سمت MPU6050 را به 3.3 ولت میزنم سطح منطقی منطقی high آن 2.5 ولت هست و وقتی به 5 ولت میزنم سطح منطقی high آن 3.3 ولت هست و در دو حالت i2c جواب نمیدهد.
متاسفانه در حال حاضر به logic analyzer دسترسی ندارم
خیلی ممنونم از راهنماییتان