Примітка: Цей драйвер не буде компілюватися в образи, призначені для процесорів, відмінних від ARM. Він дійсно призначений для роботи лише на Raspberry Pi. Він може працювати, а може й ні, на подібних платах або прямих клонах.
1. Мета
Цей драйвер дозволяє використовувати виводи GPIO Rapberry Pi аналогічно драйверу паралельного порту на ПК x86. Він може використовувати ті ж генератори кроків, лічильники енкодерів та подібні компоненти.
2. Застосування
loadrt hal_pi_gpio dir=0x13407 exclude=0x1F64BF8
Маска «dir» визначає, чи є контакти входами та виходами, маска виключення запобігає використанню контактів драйвером (і таким чином дозволяє використовувати їх для звичайних цілей RPi, таких як SPI або UART).
Маска може бути у десятковому або шістнадцятковому форматі (шістнадцятковий може бути простішим, оскільки не буде перенесення).
Щоб визначити значення масок, додайте шестнадцяткові/десятичні значення для всіх виводів, які повинні бути налаштовані як виходи, і аналогічно для всіх виводів, які повинні бути виключені відповідно до наведеної нижче таблиці.
| Номер 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.