Примітка: Цей драйвер не буде компілюватися в образи, призначені для процесорів, відмінних від ARM. Він дійсно призначений для роботи лише на Raspberry Pi. Він може працювати, а може й ні, на подібних платах або прямих клонах.

1. Мета

Цей драйвер дозволяє використовувати виводи GPIO Rapberry Pi аналогічно драйверу паралельного порту на ПК x86. Він може використовувати ті ж генератори кроків, лічильники енкодерів та подібні компоненти.

2. Застосування

loadrt hal_pi_gpio dir=0x13407 exclude=0x1F64BF8

Маска «dir» визначає, чи є контакти входами та виходами, маска виключення запобігає використанню контактів драйвером (і таким чином дозволяє використовувати їх для звичайних цілей RPi, таких як SPI або UART).

Маска може бути у десятковому або шістнадцятковому форматі (шістнадцятковий може бути простішим, оскільки не буде перенесення).

Щоб визначити значення масок, додайте шестнадцяткові/десятичні значення для всіх виводів, які повинні бути налаштовані як виходи, і аналогічно для всіх виводів, які повинні бути виключені відповідно до наведеної нижче таблиці.

Table 1. Маски GPIO — відповідність номерів GPIO (крайній лівий стовпець) фізичним номерам контактів, надрукованим на платі Raspberry Pi (крайній правий стовпець), та десятковим/шістнадцятковим значенням, що складають значення маски.
Номер GPIO Десятковий Шістнадцятковий PIN-код

2

1

0x00000001

3

3

2

0x00000002

5

4

4

0x00000004

7

5

8

0x00000008

29

6

16

0x00000010

31

7

32

0x00000020

26

8

64

0x00000040

24

9

128

0x00000080

21

10

256

0x00000100

19

11

512

0x00000200

23

12

1024

0x00000400

32

13

2048

0x00000800

33

14

4096

0x00001000

8

15

8192

0x00002000

10

16

16384

0x00004000

36

17

32768

0x00008000

11

18

65536

0x00010000

12

19

131072

0x00020000

35

20

262144

0x00040000

38

21

524288

0x00080000

40

22

1048576

0x00100000

15

23

2097152

0x00200000

16

24

4194304

0x00400000

18

25

8388608

0x00800000

22

26

16777216

0x01000000

37

27

33554432

0x02000000

13

Примітка: При обчисленні значення маски окремого контакту використовуються його номери GPIO, значення обчислюється як 2^(номер GPIO - 2), тоді як при найменуванні контактів HAL використовуються номери контактів роз’єму Raspberry Pi.

Наприклад, якщо ви ввімкнете GPIO 17 як вихід (dir=0x8000), то цей вихід буде керуватися виводом hal hal_pi_gpio.pin-11-out.

3. Піни

  • hal_pi_gpio.pin-NN-out

  • hal_pi_gpio.pin-NN-in

Залежно від напрямку та виключити маски.

4. Параметри

Існують лише стандартні параметри синхронізації, створені для всіх компонентів:

  • hal_pi_gpio.read.tmax

  • hal_pi_gpio.read.tmax-increased

  • hal_pi_gpio.write.tmax

  • hal_pi_gpio.write.tmax-increased

З невідомих причин драйвер також створює HAL-виводи для індикації часу:

  • hal_pi_gpio.read.time

  • hal_pi_gpio.write.time

5. Функції

  • hal_pi_gpio.read - Додайте це до базового потоку, щоб оновити значення виводів HAL відповідно до значень фізичного входу.

  • hal_pi_gpio.write - Додайте це до базового потоку, щоб оновити фізичні контакти відповідно до значень HAL.

Зазвичай функція «read» буде на початку списку викликів, перед будь-якими лічильниками енкодера, а функція «write» буде пізніше у списку викликів, після stepgen.make-pulses.

6. Нумерація контактів

Роз’єм GPIO та розкладка виводів залишаються незмінними з 2015 року. Ці старі моделі Pi, ймовірно, є невдалим вибором для LinuxCNC. Однак цей драйвер розроблений для роботи з ними і буде виявляти та правильно налаштовувати два альтернативні варіанти розкладки виводів.

Поточне розташування контактів між номерами GPIO та номерами контактів роз’єму наведено у таблиці вище.

Зверніть увагу, що рядок конфігурації використовує номери GPIO, але після завантаження драйвера назви контактів HAL відповідають номерам контактів роз’єму.

Це може бути більш логічним, ніж здається на перший погляд. Під час налаштування потрібно сконфігурувати достатню кількість контактів кожного типу, уникаючи перезапису будь-яких інших функцій, необхідних вашій системі. Потім, після завантаження драйвера, у шарі HAL вам потрібно лише знати, куди підключити дроти для кожного контакту HAL.

7. Відомі помилки

На даний момент (16 липня 2023 р.) цей драйвер, здається, працює лише на Raspbian, оскільки загальний образ Debian не налаштовує правильні інтерфейси в /dev/gpiomem та обмежує доступ до інтерфейсу /sys/mem.