I2CGET(8) System Manager's Manual I2CGET(8)

i2cget - خواندن ثبات‌های I2C

i2cget [-f] [-y] [-a] i2cbus chip-address [data-address [mode [length]]]
i2cget -V
i2cget -h

دستور i2cget یک برنامه کمکی کوچک برای خواندن ثبات‌های قابل مشاهده از طریق گذرگاه I2C (یا SMBus) است.

نمایش نسخه و خروج.
نمایش راهنما و خروج.
اجبار به دسترسی به دستگاه حتی در صورتی که مشغول باشد. به‌طور پیش‌فرض، i2cget از دسترسی به دستگاهی که تحت کنترل درایور هسته است خودداری می‌کند. استفاده از این فلگ خطرناک است و می‌تواند درایور هسته مربوطه را به شدت سردرگم کند. همچنین می‌تواند باعث شود i2cget یک مقدار نامعتبر بازگرداند. بنابراین با مسئولیت خود و تنها در صورتی که می‌دانید چه می‌کنید از آن استفاده نمایید.
غیرفعال کردن حالت تعاملی. به‌طور پیش‌فرض، i2cget قبل از دستکاری گذرگاه I2C منتظر تأیید کاربر می‌ماند. با استفاده از این فلگ، عملیات را مستقیماً انجام می‌دهد. این گزینه عمدتاً برای استفاده در اسکریپت‌ها در نظر گرفته شده است. با احتیاط استفاده شود.
اجازه استفاده از آدرس‌های بین 0x00 - 0x07 و 0x78 - 0x7f. توصیه نمی‌شود.

دو گزینه (پارامتر) الزامی برای i2cget وجود دارد. i2cbus شماره یا نام گذرگاه I2C برای پویش را مشخص می‌کند. این شماره باید با یکی از گذرگاه‌های فهرست‌شده توسط i2cdetect -l مطابقت داشته باشد. chip-address آدرس تراشه روی آن گذرگاه را مشخص می‌کند و یک عدد صحیح بین 0x08 و 0x77 است.

data-address آدرس مورد نظر روی آن تراشه برای خواندن را مشخص می‌کند و یک عدد صحیح بین 0x00 و 0xFF است. در صورت حذف، ثبات فعال فعلی خوانده خواهد شد (اگر این کار برای تراشه مورد نظر منطقی باشد).

پارامتر mode، در صورت تعیین شدن، یکی از حروف b، w، c، s یا i است که به ترتیب متناظر با تراکنش خواندن داده بایتی، خواندن داده کلمه‌ای، نوشتن بایت/خواندن بایت، خواندن بلوکی SMBus یا خواندن بلوکی I2C می‌باشند. همچنین می‌توان یک p را به انتهای پارامتر mode افزود تا PEC فعال شود، به جز برای تراکنش‌های بلوکی I2C. اگر پارامتر mode حذف شود، i2cget به‌طور پیش‌فرض یک تراکنش خواندن داده بایتی انجام می‌دهد، مگر اینکه data-address نیز حذف شده باشد، که در این حالت تراکنش پیش‌فرض (و تنها تراکنش معتبر)، خواندن یک تک‌بایت خواهد بود.

پارامتر length، در صورت کاربرد و تعیین شدن، طول تراکنش بلوکی را مشخص می‌کند. مقادیر معتبر بین ۱ و ۳۲ هستند. مقدار پیش‌فرض ۳۲ است.

دستور i2cget در صورت استفاده نادرست می‌تواند فوق‌العاده خطرناک باشد. پروتکل‌های I2C و SMBus به گونه‌ای طراحی شده‌اند که یک تراکنش خواندن SMBus می‌تواند توسط برخی تراشه‌ها به عنوان یک تراکنش نوشتن دیده شود. این امر به ویژه زمانی صادق است که mode روی cp (نوشتن بایت/خواندن بایت همراه با PEC) تنظیم شده باشد. در استفاده از این برنامه به شدت احتیاط کنید.

دریافت مقدار ثبات ۸ بیتی 0x11 از دستگاه I2C در آدرس ۷ بیتی 0x2d روی گذرگاه ۱ (i2c-1)، پس از تأیید کاربر:

# i2cget 1 0x2d 0x11

دریافت مقدار ثبات ۱۶ بیتی 0x00 از دستگاه I2C در آدرس ۷ بیتی 0x48 روی گذرگاه ۱ (i2c-1)، پس از تأیید کاربر:

# i2cget 1 0x48 0x00 w

تنظیم ثبات اشاره‌گر داخلی یک EEPROM 24C02 در آدرس ۷ بیتی 0x50 روی گذرگاه ۹ (i2c-9) به مقدار 0x00، و سپس خواندن ۲ بایت اول از آن EEPROM:

# i2cset -y 9 0x50 0x00 ; i2cget -y 9 0x50 ; i2cget -y 9 0x50

این دستور فرض می‌کند که دستگاه با هر بار خواندن، ثبات اشاره‌گر داخلی خود را به صورت خودکار افزایش می‌دهد و از تراکنش‌های خواندن بایت پشتیبانی می‌کند (خواندن بدون تعیین آدرس ثبات، «Receive Byte» در اصطلاحات SMBus). بیشتر دستگاه‌های EEPROM به این شکل رفتار می‌کنند. توجه داشته باشید که این کار تنها تا زمانی ایمن است که هیچ‌کس دیگری هم‌زمان به دستگاه I2C دسترسی نداشته باشد. رویکرد ایمن‌تر استفاده از تراکنش SMBus از نوع «Read Word» به جای آن، یا یک تراکنش خواندن بلوکی I2C برای خواندن بیش از ۲ بایت است.

تنظیم ثبات اشاره‌گر داخلی یک EEPROM 24C32 در آدرس ۷ بیتی 0x53 روی گذرگاه ۹ (i2c-9) به مقدار 0x0000، و سپس خواندن ۲ بایت اول از آن EEPROM:

# i2cset -y 9 0x53 0x00 0x00 ; i2cget -y 9 0x53 ; i2cget -y 9 0x53
این مورد نیز مجدداً فرض می‌کند که دستگاه با هر بار خواندن، ثبات اشاره‌گر داخلی خود را به طور خودکار افزایش می‌دهد و از تراکنش‌های خواندن بایت پشتیبانی می‌کند. در حالی که مثال قبلی برای یک EEPROM کوچک با آدرس‌دهی داخلی ۸ بیتی بود، این مثال برای یک EEPROM بزرگ‌تر با آدرس‌دهی داخلی ۱۶ بیتی است. دقت کنید که اجرای این دستور روی یک EEPROM کوچک با آدرس‌دهی داخلی ۸ بیتی در عمل مقدار 0x00 را در بایت اول آن EEPROM می‌نویسد. نگرانی‌های ایمنی ذکرشده در بالا همچنان پابرجا هستند، با این حال در این حالت معادل SMBus وجود ندارد، بنابراین اگر کنترل‌کننده اصلی (master) شما به طور کامل از قابلیت‌های I2C پشتیبانی نکند، این تنها راه برای خواندن داده‌ها از یک EEPROM بزرگ است. با یک master با پشتیبانی کامل از I2C، می‌توانید از i2ctransfer برای دستیابی به همین هدف به روشی امن‌تر و سریع‌تر استفاده کنید.

خواندن ۸ بایت نخست از یک دستگاه EEPROM در آدرس ۷ بیتی 0x50 روی گذرگاه ۴ (i2c-4):

# i2cget -y 4 0x50 0x00 i 8

برای گزارش اشکالات یا ارسال اصلاحات، لطفاً به فهرست پستی Linux I2C به نشانی <linux-i2c@vger.kernel.org> همراه با رونوشت (Cc) به نگه‌دارنده فعلی بنویسید: Jean Delvare <jdelvare@suse.de>.

i2cdetect(8), i2cdump(8), i2cset(8), i2ctransfer(8)

Jean Delvare

این صفحه راهنما به شدت از صفحات نوشته‌شده توسط David Z Maze برای i2cset الهام گرفته شده است.

مه ۲۰۲۲