ใช้ GPIO เพิ่มเติมเป็น I / O ดิจิตอลหรือไม่


11

หวังว่าคำถามนี้จะค่อนข้างง่าย แต่ googling ที่รวดเร็วของฉันไม่พบคำตอบ

ฉันรู้ว่า RPi มี GPIO หลายตัวที่ฉันสามารถใช้ได้เช่นเดียวกับ GPIOs พิเศษ (SPI, I2C, UART และอื่น ๆ ) ในโครงการของฉันฉันใช้ GPIO ปกติหมดแล้วและต้องการใช้ SPI, I2C และ GPIO อื่น ๆ เป็น GPIO แบบ "ปกติ" เช่นกัน ฉันรู้ว่าสามารถทำได้ แต่ฉันคิดว่าฉันไม่แน่ใจว่าฉันจะตั้งค่าให้ไม่ทำงานในโหมด SPI / I2C / etc และเพียงแค่ทำงานเป็น GPIO ปกติ

ฉันต้องทำอะไรเพื่อตั้งค่าเหล่านี้อย่างถูกต้องหรือไม่?

คำตอบ:


10

คำตอบสั้น ๆ

ไม่คุณ (เกือบ) ไม่ จริง ๆ แล้วมันเป็นวิธีอื่น ๆ - คุณต้องตั้งค่าให้ไม่ใช่ GPIO แต่เพื่อให้บริการตามวัตถุประสงค์พิเศษของพวกเขา ข้อยกเว้นเพียงอย่างเดียวคือพิน UART นอกจากนี้และI²Cหมุดพิเศษอย่างใด

หมุด UART

พิน UART ถูกใช้โดยเคอร์เนลสำหรับคอนโซล คุณจะต้องกำหนดค่าระบบเพื่อไม่ให้ใช้หากคุณต้องการให้ระบบพร้อมใช้งาน:

  • แก้ไข/boot/cmdline.txtและลบconsole=ttyAMA0,115200และkgdboc=ttyAMA0,115200พารามิเตอร์
  • แก้ไข/etc/inittabและใส่ความคิดเห็น (ใส่#ตัวอักษรไว้ด้านหน้า) บรรทัด:

    T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    
  • รีบูต RaspberryPi ของคุณ

ตอนนี้ระบบไม่ควรใช้พินและคุณสามารถใช้พินได้

I²Cพิน

หมุดI²Cติดตั้งตัวต้านทานแบบดึงขึ้นบน 1.8k พวกเขาไม่สามารถปิดการใช้งาน สิ่งนี้ จำกัด การใช้งานพินเหล่านั้นในบางสถานการณ์ (แต่อาจมีประโยชน์ในบางกรณี)

โซลูชั่นเพิ่มเติม

หากใช้พิน GPIO ต่ำบางครั้งคุณสามารถขยายจำนวนได้อย่างง่ายดายโดยใช้ฮาร์ดแวร์เพิ่มเติม (แต่ง่าย) สำหรับตัวอย่างผลลัพธ์คุณสามารถใช้shift registersหรือI²C I/O expanders( หรือเรียกอีกอย่างว่า `ตัวขยายบัสI²C) ซึ่งทั้งง่ายต่อการซื้อและใช้ คุณสามารถหาตัวอย่างของการใช้งานมันนี่

PFC8574(หรือคล้ายกันจากตระกูลนี้) ได้รับความนิยมมากจนมีโมดูลเคอร์เนลที่พร้อมใช้งานสำหรับจัดการการสื่อสารทั้งหมดสำหรับคุณ ( ไม่ได้เปิดใช้งานในเคอร์เนล RaspberryPi อย่างเป็นทางการคุณจะต้องรวบรวมเคอร์เนลของคุณเองเพื่อใช้ ) โมดูลนี้เรียกว่าgpio_pcf857xโดยที่คุณโหลดด้วยmodprobe(พร้อมกับไดรเวอร์I²C) และคุณมีชิปที่เชื่อมต่อกับI²Cบัสคุณสามารถเปิดใช้งานได้ดังนี้:

echo pcf8574 0x27 > /sys/class/i2c-adapter/i2c-0/new_device

ที่pcf8574เป็นชื่อชิปจริงของคุณ (โมดูลนี้สามารถจัดการชิปที่แตกต่างกันเช่นpca967xและmax732x) และ0x27เป็นที่อยู่I²C(คุณสามารถกำหนดค่าที่อยู่ของชิปเมื่อเดินสายได้)

สิ่งนี้จะสร้างรายการใน/sys/class/gpio/ไดเรกทอรีที่จะช่วยให้คุณใช้งานได้เช่นเดียวกับพอร์ต GPIO อื่น ๆ ใน RaspberryPi ซึ่งจะให้คุณใช้sysอินเทอร์เฟซ (ตัวอย่างเช่นwiringPiSetupSys()wiringPi) น่าเสียดายที่RPi.GPIOโมดูลPython ไม่รองรับโหมดนี้ดังนั้นจึงไม่สามารถใช้พินนี้กับห้องสมุดนี้ได้ หมุดจะมีตัวเลขสูงเช่น 248-255 หรือคล้ายกัน

หมายเหตุ: PCF8574คือsinking current- สามารถให้ไดรฟ์ซิงค์ (ยอมรับในสถานะต่ำ) มากถึง 20mA แต่สามารถแหล่ง 0.1mA ในสถานะสูงเท่านั้น +3.3V -> LED -> RESISTOR -> PCF8574_PINซึ่งหมายความว่าคุณมักจะไปใช้ในตรรกะย้อนกลับคือ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.