mirror of
https://e.coding.net/weidongshan/01_all_series_quickstart.git
synced 2025-11-04 04:56:22 +08:00
Compare commits
2 Commits
ec60a9af5b
...
24c2643aef
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
24c2643aef | ||
|
|
c9f103616c |
@@ -139,7 +139,10 @@ int read_gps_raw_data(int fd, char *buf)
|
||||
buf[i++] = c;
|
||||
}
|
||||
if (c == '\n' || c == '\r')
|
||||
{
|
||||
buf[i] = '\0';
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -227,6 +230,7 @@ int main(int argc, char **argv)
|
||||
/* parse line */
|
||||
if (iRet == 0)
|
||||
{
|
||||
printf("GPS raw data: %s\n", buf);
|
||||
iRet = parse_gps_raw_data(buf, time, Lat, ns, Lng, ew);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
|
||||
# 1. 使用不同的开发板内核时, 一定要修改KERN_DIR
|
||||
# 2. KERN_DIR中的内核要事先配置、编译, 为了能编译内核, 要先设置下列环境变量:
|
||||
# 2.1 ARCH, 比如: export ARCH=arm64
|
||||
# 2.2 CROSS_COMPILE, 比如: export CROSS_COMPILE=aarch64-linux-gnu-
|
||||
# 2.3 PATH, 比如: export PATH=$PATH:/home/book/100ask_roc-rk3399-pc/ToolChain-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin
|
||||
# 注意: 不同的开发板不同的编译器上述3个环境变量不一定相同,
|
||||
# 请参考各开发板的高级用户使用手册
|
||||
|
||||
#KERN_DIR = /home/book/100ask_imx6ull-sdk/Linux-4.9.88 # 板子所用内核源码的目录
|
||||
#KERN_DIR = /home/book/100ask_imx6ull_mini-sdk/Buildroot_2020.02.x/output/build/linux-origin_master
|
||||
KERN_DIR = /home/book/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x/output/build/linux-origin_master
|
||||
|
||||
all:
|
||||
make -C $(KERN_DIR) M=`pwd` modules
|
||||
$(CROSS_COMPILE)gcc -o led_test led_test.c
|
||||
clean:
|
||||
make -C $(KERN_DIR) M=`pwd` modules clean
|
||||
rm -rf modules.order led_test
|
||||
|
||||
# 参考内核源码drivers/char/ipmi/Makefile
|
||||
# 要想把a.c, b.c编译成ab.ko, 可以这样指定:
|
||||
# ab-y := a.o b.o
|
||||
# obj-m += ab.o
|
||||
|
||||
|
||||
|
||||
obj-m += led_drv.o
|
||||
|
||||
@@ -0,0 +1,169 @@
|
||||
#include "asm-generic/errno-base.h"
|
||||
#include "asm-generic/gpio.h"
|
||||
#include "asm/uaccess.h"
|
||||
#include <linux/module.h>
|
||||
#include <linux/poll.h>
|
||||
|
||||
#include <linux/fs.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/stat.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/kmod.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/fcntl.h>
|
||||
#include <linux/timer.h>
|
||||
|
||||
struct gpio_desc{
|
||||
int gpio;
|
||||
int irq;
|
||||
char *name;
|
||||
int key;
|
||||
struct timer_list key_timer;
|
||||
} ;
|
||||
|
||||
/* STM32MP157有2个LED: PA10控制的LED2, PG8控制的LED3
|
||||
*
|
||||
* cat /sys/class/gpio/gpiochip96/label 可以看到 GPIOG
|
||||
* 所以 PG8'的编号 = 96+8=104
|
||||
*
|
||||
* cat /sys/kernel/debug/gpio : 可以看到 gpio-10, 它被占用了
|
||||
*
|
||||
* 所以我们使用104
|
||||
*/
|
||||
static struct gpio_desc gpios[] = {
|
||||
{104, 0, "led3", },
|
||||
};
|
||||
|
||||
/* 主设备号 */
|
||||
static int major = 0;
|
||||
static struct class *gpio_class;
|
||||
|
||||
|
||||
/* 实现对应的open/read/write等函数,填入file_operations结构体 */
|
||||
static ssize_t gpio_drv_read (struct file *file, char __user *buf, size_t size, loff_t *offset)
|
||||
{
|
||||
char tmp_buf[2];
|
||||
int err;
|
||||
int count = sizeof(gpios)/sizeof(gpios[0]);
|
||||
|
||||
if (size != 2)
|
||||
return -EINVAL;
|
||||
|
||||
err = copy_from_user(tmp_buf, buf, 1);
|
||||
|
||||
if (tmp_buf[0] >= count)
|
||||
return -EINVAL;
|
||||
|
||||
tmp_buf[1] = gpio_get_value(gpios[tmp_buf[0]].gpio);
|
||||
|
||||
err = copy_to_user(buf, tmp_buf, 2);
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
static ssize_t gpio_drv_write(struct file *file, const char __user *buf, size_t size, loff_t *offset)
|
||||
{
|
||||
unsigned char ker_buf[2];
|
||||
int err;
|
||||
|
||||
if (size != 2)
|
||||
return -EINVAL;
|
||||
|
||||
err = copy_from_user(ker_buf, buf, size);
|
||||
|
||||
if (ker_buf[0] >= sizeof(gpios)/sizeof(gpios[0]))
|
||||
return -EINVAL;
|
||||
|
||||
gpio_set_value(gpios[ker_buf[0]].gpio, ker_buf[1]);
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* 定义自己的file_operations结构体 */
|
||||
static struct file_operations gpio_key_drv = {
|
||||
.owner = THIS_MODULE,
|
||||
.read = gpio_drv_read,
|
||||
.write = gpio_drv_write,
|
||||
};
|
||||
|
||||
|
||||
/* 在入口函数 */
|
||||
static int __init gpio_drv_init(void)
|
||||
{
|
||||
int err;
|
||||
int i;
|
||||
int count = sizeof(gpios)/sizeof(gpios[0]);
|
||||
|
||||
printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
/* set pin as output */
|
||||
err = gpio_request(gpios[i].gpio, gpios[i].name);
|
||||
if (err < 0) {
|
||||
printk("can not request gpio %s %d\n", gpios[i].name, gpios[i].gpio);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
gpio_direction_output(gpios[i].gpio, 1);
|
||||
}
|
||||
|
||||
/* 注册file_operations */
|
||||
major = register_chrdev(0, "100ask_led", &gpio_key_drv); /* /dev/gpio_desc */
|
||||
|
||||
gpio_class = class_create(THIS_MODULE, "100ask_led_class");
|
||||
if (IS_ERR(gpio_class)) {
|
||||
printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);
|
||||
unregister_chrdev(major, "100ask_led_class");
|
||||
return PTR_ERR(gpio_class);
|
||||
}
|
||||
|
||||
device_create(gpio_class, NULL, MKDEV(major, 0), NULL, "100ask_led"); /* /dev/100ask_gpio */
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
/* 有入口函数就应该有出口函数:卸载驱动程序时,就会去调用这个出口函数
|
||||
*/
|
||||
static void __exit gpio_drv_exit(void)
|
||||
{
|
||||
int i;
|
||||
int count = sizeof(gpios)/sizeof(gpios[0]);
|
||||
|
||||
printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);
|
||||
|
||||
device_destroy(gpio_class, MKDEV(major, 0));
|
||||
class_destroy(gpio_class);
|
||||
unregister_chrdev(major, "100ask_led");
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
gpio_free(gpios[i].gpio);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* 7. 其他完善:提供设备信息,自动创建设备节点 */
|
||||
|
||||
module_init(gpio_drv_init);
|
||||
module_exit(gpio_drv_exit);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <poll.h>
|
||||
#include <signal.h>
|
||||
|
||||
static int fd;
|
||||
|
||||
|
||||
//int led_on(int which);
|
||||
//int led_off(int which);
|
||||
//int led_status(int which);
|
||||
|
||||
/*
|
||||
* ./led_test <0|1|2|..> on
|
||||
* ./led_test <0|1|2|..> off
|
||||
* ./led_test <0|1|2|..>
|
||||
*/
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int ret;
|
||||
char buf[2];
|
||||
|
||||
int i;
|
||||
|
||||
/* 1. 判断参数 */
|
||||
if (argc < 2)
|
||||
{
|
||||
printf("Usage: %s <0|1|2|...> [on | off]\n", argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/* 2. 打开文件 */
|
||||
fd = open("/dev/100ask_led", O_RDWR);
|
||||
if (fd == -1)
|
||||
{
|
||||
printf("can not open file /dev/100ask_led\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (argc == 3)
|
||||
{
|
||||
/* write */
|
||||
buf[0] = strtol(argv[1], NULL, 0);
|
||||
|
||||
if (strcmp(argv[2], "on") == 0)
|
||||
buf[1] = 0;
|
||||
else
|
||||
buf[1] = 1;
|
||||
|
||||
ret = write(fd, buf, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[0] = strtol(argv[1], NULL, 0);
|
||||
ret = read(fd, buf, 2);
|
||||
if (ret == 2)
|
||||
{
|
||||
printf("led %d status is %s\n", buf[0], buf[1] == 0 ? "on" : "off");
|
||||
}
|
||||
}
|
||||
|
||||
close(fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,9 +6,14 @@
|
||||
cd adbd_files
|
||||
cp * / -rf
|
||||
|
||||
dos2unix /lib/udev/rules.d/61-usb-adbd.rules
|
||||
dos2unix /usr/bin/usb_config
|
||||
dos2unix /etc/init.d/S99adbd
|
||||
|
||||
chmod +x /usr/bin/adb
|
||||
chmod +x /usr/bin/adbd
|
||||
chmod +x /usr/bin/usb_config
|
||||
chmod +x /etc/init.d/S99adbd
|
||||
```
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,31 @@
|
||||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
CONFIG += c++11
|
||||
|
||||
# The following define makes your compiler emit warnings if you use
|
||||
# any Qt feature that has been marked deprecated (the exact warnings
|
||||
# depend on your compiler). Please consult the documentation of the
|
||||
# deprecated API in order to know how to port your code away from it.
|
||||
DEFINES += QT_DEPRECATED_WARNINGS
|
||||
|
||||
# You can also make your code fail to compile if it uses deprecated APIs.
|
||||
# In order to do so, uncomment the following line.
|
||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
SOURCES += \
|
||||
main.cpp \
|
||||
mainwindow.cpp
|
||||
|
||||
HEADERS += \
|
||||
mainwindow.h
|
||||
|
||||
FORMS += \
|
||||
mainwindow.ui
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
||||
@@ -0,0 +1,338 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 4.12.2, 2025-04-22T05:29:24. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
<value type="QByteArray">{02215df0-8c5c-48af-80a6-48273a33f310}</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||
<value type="int">0</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||
<value type="QString" key="language">Cpp</value>
|
||||
<valuemap type="QVariantMap" key="value">
|
||||
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||
<value type="QString" key="language">QmlJS</value>
|
||||
<valuemap type="QVariantMap" key="value">
|
||||
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
||||
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
||||
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
||||
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
||||
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
|
||||
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
|
||||
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.Questionable</value>
|
||||
<valuemap type="QVariantMap" key="ClangTools">
|
||||
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
|
||||
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
|
||||
<value type="int" key="ClangTools.ParallelJobs">2</value>
|
||||
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
|
||||
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
|
||||
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
|
||||
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">100ask</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">100ask</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{79744cd3-2ede-4774-85eb-8dd996080ebe}</value>
|
||||
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
||||
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||
<value type="bool">true</value>
|
||||
<value type="int" key="EnableQmlDebugging">0</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/book/build-IOT-100ask-Debug</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/book/build-IOT-100ask-Debug</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||
<value type="int" key="QtQuickCompiler">2</value>
|
||||
<value type="int" key="SeparateDebugInfo">2</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||
<value type="bool">true</value>
|
||||
<value type="int" key="EnableQmlDebugging">2</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/book/build-IOT-100ask-Release</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/book/build-IOT-100ask-Release</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||
<value type="int" key="QtQuickCompiler">0</value>
|
||||
<value type="int" key="SeparateDebugInfo">2</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
||||
<value type="bool">true</value>
|
||||
<value type="int" key="EnableQmlDebugging">0</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/book/build-IOT-100ask-Profile</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/book/build-IOT-100ask-Profile</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||
<value type="int" key="QtQuickCompiler">0</value>
|
||||
<value type="int" key="SeparateDebugInfo">0</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
|
||||
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
|
||||
<value type="QString">cpu-cycles</value>
|
||||
</valuelist>
|
||||
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
|
||||
<value type="int" key="Analyzer.Perf.Frequency">250</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
|
||||
<value type="QString">-e</value>
|
||||
<value type="QString">cpu-cycles</value>
|
||||
<value type="QString">--call-graph</value>
|
||||
<value type="QString">dwarf,4096</value>
|
||||
<value type="QString">-F</value>
|
||||
<value type="QString">250</value>
|
||||
</valuelist>
|
||||
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
|
||||
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
|
||||
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
||||
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
||||
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
||||
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
||||
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
|
||||
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
||||
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||
<value type="int">0</value>
|
||||
<value type="int">1</value>
|
||||
<value type="int">2</value>
|
||||
<value type="int">3</value>
|
||||
<value type="int">4</value>
|
||||
<value type="int">5</value>
|
||||
<value type="int">6</value>
|
||||
<value type="int">7</value>
|
||||
<value type="int">8</value>
|
||||
<value type="int">9</value>
|
||||
<value type="int">10</value>
|
||||
<value type="int">11</value>
|
||||
<value type="int">12</value>
|
||||
<value type="int">13</value>
|
||||
<value type="int">14</value>
|
||||
</valuelist>
|
||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/book/IOT/IOT.pro</value>
|
||||
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/book/IOT/IOT.pro</value>
|
||||
<value type="QString" key="RunConfiguration.Arguments"></value>
|
||||
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
|
||||
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
||||
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
|
||||
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/book/build-IOT-100ask-Debug</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||
<value type="int">1</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||
<value type="int">22</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>Version</variable>
|
||||
<value type="int">22</value>
|
||||
</data>
|
||||
</qtcreator>
|
||||
@@ -0,0 +1,11 @@
|
||||
#include "mainwindow.h"
|
||||
|
||||
#include <QApplication>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
MainWindow w;
|
||||
w.show();
|
||||
return a.exec();
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
#include "mainwindow.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include <QDebug>
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
, ui(new Ui::MainWindow)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::on_pushButton_clicked()
|
||||
{
|
||||
/* burn button */
|
||||
qDebug() << "Burn Button clicked!";
|
||||
}
|
||||
|
||||
void MainWindow::on_pushButton_2_clicked()
|
||||
{
|
||||
/* test button */
|
||||
qDebug() << "Test Button clicked!";
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
#ifndef MAINWINDOW_H
|
||||
#define MAINWINDOW_H
|
||||
|
||||
#include <QMainWindow>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
namespace Ui { class MainWindow; }
|
||||
QT_END_NAMESPACE
|
||||
|
||||
class MainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MainWindow(QWidget *parent = nullptr);
|
||||
~MainWindow();
|
||||
|
||||
private slots:
|
||||
void on_pushButton_clicked();
|
||||
|
||||
void on_pushButton_2_clicked();
|
||||
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
};
|
||||
#endif // MAINWINDOW_H
|
||||
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>140</x>
|
||||
<y>210</y>
|
||||
<width>161</width>
|
||||
<height>91</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Burn</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="pushButton_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>350</x>
|
||||
<y>210</y>
|
||||
<width>161</width>
|
||||
<height>91</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Test</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,31 @@
|
||||
1.编译jimtcl
|
||||
unzip jimtcl-master.zip
|
||||
cd jimtcl-master/
|
||||
ls
|
||||
./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/tmp
|
||||
make
|
||||
make install
|
||||
ls tmp/
|
||||
|
||||
2.编译libusb
|
||||
unzip libusb-1.0.28.zip
|
||||
cd libusb-1.0.28/
|
||||
./bootstrap.sh
|
||||
./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/tmp
|
||||
make
|
||||
make install
|
||||
|
||||
|
||||
3.编译openocd
|
||||
命令如下:
|
||||
unzip openocd-master.zip
|
||||
cd unzip openocd-master
|
||||
./bootstrap
|
||||
|
||||
JIMTCL_CFLAGS="-I /home/book/openocd/jimtcl-master/tmp/include" JIMTCL_LIBS="-L/home/book/openocd/jimtcl-master/tmp/lib /home/book/openocd/jimtcl-master/tmp/lib/libjim.a" LIBUSB1_CFLAGS="-I /home/book/openocd/libusb-1.0.28/tmp/include/libusb-1.0/" LIBUSB1_LIBS="-L/home/book/openocd/libusb-1.0.28/tmp/lib -lusb-1.0" ./configure --host=arm-buildroot-linux-gnueabihf --enable-stlink --prefix=$PWD/tmp
|
||||
|
||||
make // 会在最后链接时出错, 手工执行下面的链接命令
|
||||
|
||||
arm-buildroot-linux-gnueabihf-gcc -Wall -Wstrict-prototypes -Wformat-security -Wshadow -Wextra -Wno-unused-parameter -Wbad-function-cast -Wcast-align -Wredundant-decls -Wpointer-arith -Wundef -Werror -g -O2 -o src/openocd src/main.o src/.libs/libopenocd.a -L/home/book/openocd/libusb-1.0.28/tmp/lib /home/book/openocd/libusb-1.0.28/tmp/lib/libusb-1.0.so -lpthread -lm -L/home/book/openocd/jimtcl-master/tmp/lib /home/book/openocd/jimtcl-master/tmp/lib/libjim.a -lutil -ldl -pthread -Wl,-rpath -Wl,/home/book/openocd/libusb-1.0.28/tmp/lib -lssl -lz -lcrypto
|
||||
|
||||
make install
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,128 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <modbus.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define DO_BEEP1 0
|
||||
#define DO_BEEP2 1
|
||||
#define DO_LED1 2
|
||||
#define DO_LED2 3
|
||||
#define DO_LED3 4
|
||||
#define AI_TEMP 0
|
||||
#define AI_HUMI 1
|
||||
|
||||
void usage(const char *progname) {
|
||||
printf("Usage: %s <device> <command>\n", progname);
|
||||
printf("Commands:\n");
|
||||
printf(" beep1 on/off\n");
|
||||
printf(" beep2 on/off\n");
|
||||
printf(" led1 on/off\n");
|
||||
printf(" led2 on/off\n");
|
||||
printf(" led3 on/off\n");
|
||||
printf(" temp\n");
|
||||
printf(" humi\n");
|
||||
}
|
||||
|
||||
int set_digital_output(modbus_t *ctx, int addr, int value) {
|
||||
return modbus_write_bit(ctx, addr, value);
|
||||
}
|
||||
|
||||
int get_analog_input(modbus_t *ctx, int addr, float *value) {
|
||||
uint16_t reg;
|
||||
int rc = modbus_read_registers(ctx, addr, 1, ®);
|
||||
if (rc == -1) {
|
||||
return -1;
|
||||
}
|
||||
*value = (float)reg / 10.0; // Assuming 10x scaling for temperature and humidity
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 3) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
modbus_t *ctx;
|
||||
int rc;
|
||||
|
||||
// 创建Modbus上下文
|
||||
ctx = modbus_new_rtu(argv[1], 115200, 'N', 8, 1);
|
||||
if (ctx == NULL) {
|
||||
fprintf(stderr, "Unable to create the libmodbus context\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 连接到Modbus设备
|
||||
if (modbus_connect(ctx) == -1) {
|
||||
fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
|
||||
modbus_free(ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (strcmp(argv[2], "beep1") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_BEEP1, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "beep2") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_BEEP2, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "led1") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_LED1, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "led2") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_LED2, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "led3") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_LED3, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "temp") == 0) {
|
||||
if (argc != 3) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
float temp;
|
||||
rc = get_analog_input(ctx, AI_TEMP, &temp);
|
||||
if (rc == 0) {
|
||||
printf("Temperature: %.1f C\n", temp);
|
||||
}
|
||||
} else if (strcmp(argv[2], "humi") == 0) {
|
||||
if (argc != 3) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
float humi;
|
||||
rc = get_analog_input(ctx, AI_HUMI, &humi);
|
||||
if (rc == 0) {
|
||||
printf("Humidity: %.1f %%\n", humi);
|
||||
}
|
||||
} else {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rc == -1) {
|
||||
fprintf(stderr, "%s\n", modbus_strerror(errno));
|
||||
}
|
||||
|
||||
// 关闭连接并释放资源
|
||||
modbus_close(ctx);
|
||||
modbus_free(ctx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
arm-buildroot-linux-gnueabihf-gcc -I /home/book/sensor_test/libmodbus-3.1.10/tmp/include/modbus -L/home/book/sensor_test/libmodbus-3.1.10/tmp/lib -lmodbus -o sensor_test sensor_test.c
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,140 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <modbus.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define DO_BEEP1 0
|
||||
#define DO_BEEP2 1
|
||||
#define DO_LED1 2
|
||||
#define DO_LED2 3
|
||||
#define DO_LED3 4
|
||||
#define AI_TEMP 0
|
||||
#define AI_HUMI 1
|
||||
|
||||
void usage(const char *progname) {
|
||||
printf("Usage: %s <device> <command>\n", progname);
|
||||
printf("Commands:\n");
|
||||
printf(" beep1 on/off\n");
|
||||
printf(" beep2 on/off\n");
|
||||
printf(" led1 on/off\n");
|
||||
printf(" led2 on/off\n");
|
||||
printf(" led3 on/off\n");
|
||||
printf(" temp\n");
|
||||
printf(" humi\n");
|
||||
}
|
||||
|
||||
int set_digital_output(modbus_t *ctx, int addr, int value) {
|
||||
return modbus_write_bit(ctx, addr, value);
|
||||
}
|
||||
|
||||
int get_analog_input(modbus_t *ctx, int addr, float *value) {
|
||||
uint16_t reg;
|
||||
int rc = modbus_read_registers(ctx, addr, 1, ®);
|
||||
if (rc == -1) {
|
||||
return -1;
|
||||
}
|
||||
*value = (float)reg / 10.0; // Assuming 10x scaling for temperature and humidity
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 3) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
modbus_t *ctx;
|
||||
int rc;
|
||||
|
||||
// 创建Modbus上下文
|
||||
ctx = modbus_new_rtu(argv[1], 115200, 'N', 8, 1);
|
||||
if (ctx == NULL) {
|
||||
fprintf(stderr, "Unable to create the libmodbus context\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
modbus_set_debug(ctx, TRUE);
|
||||
|
||||
// 设置Modbus从站地址为3
|
||||
rc = modbus_set_slave(ctx, 3);
|
||||
if (rc == -1) {
|
||||
fprintf(stderr, "Failed to set slave address: %s\n", modbus_strerror(errno));
|
||||
modbus_free(ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 连接到Modbus设备
|
||||
if (modbus_connect(ctx) == -1) {
|
||||
fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
|
||||
modbus_free(ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (strcmp(argv[2], "beep1") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_BEEP1, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "beep2") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_BEEP2, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "led1") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_LED1, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "led2") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_LED2, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "led3") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_LED3, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "temp") == 0) {
|
||||
if (argc != 3) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
float temp;
|
||||
rc = get_analog_input(ctx, AI_TEMP, &temp);
|
||||
if (rc == 0) {
|
||||
printf("Temperature: %.1f C\n", temp);
|
||||
}
|
||||
} else if (strcmp(argv[2], "humi") == 0) {
|
||||
if (argc != 3) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
float humi;
|
||||
rc = get_analog_input(ctx, AI_HUMI, &humi);
|
||||
if (rc == 0) {
|
||||
printf("Humidity: %.1f %%\n", humi);
|
||||
}
|
||||
} else {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rc == -1) {
|
||||
fprintf(stderr, "%s\n", modbus_strerror(errno));
|
||||
}
|
||||
|
||||
// 关闭连接并释放资源
|
||||
modbus_close(ctx);
|
||||
modbus_free(ctx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,924 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include "imx6ull.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Freescale i.MX6 ULL 14x14 EVK Board";
|
||||
compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";
|
||||
|
||||
chosen {
|
||||
stdout-path = &uart1;
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x80000000 0x20000000>;
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
linux,cma {
|
||||
compatible = "shared-dma-pool";
|
||||
reusable;
|
||||
size = <0x14000000>;
|
||||
linux,cma-default;
|
||||
};
|
||||
};
|
||||
|
||||
backlight {
|
||||
compatible = "pwm-backlight";
|
||||
pwms = <&pwm1 0 1000>;
|
||||
brightness-levels = <0 1 2 3 4 5 6 8 10>;
|
||||
default-brightness-level = <8>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
pxp_v4l2 {
|
||||
compatible = "fsl,imx6ul-pxp-v4l2", "fsl,imx6sx-pxp-v4l2", "fsl,imx6sl-pxp-v4l2";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
regulators {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
reg_can_3v3: regulator@0 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <0>;
|
||||
regulator-name = "can-3v3";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
};
|
||||
|
||||
reg_usb_ltemodule: regulator@1 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "ltemodule-pwr";
|
||||
regulator-min-microvolt = <3800000>;
|
||||
regulator-max-microvolt = <3800000>;
|
||||
gpios = <&gpio5 5 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
reg_gpio_wifi: regulator@2 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "wifi-pwr";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_leds>;
|
||||
|
||||
status = "disabled";
|
||||
|
||||
led0: cpu {
|
||||
label = "cpu";
|
||||
gpios = <&gpio5 3 GPIO_ACTIVE_LOW>;
|
||||
default-state = "on";
|
||||
linux,default-trigger = "heartbeat";
|
||||
};
|
||||
};
|
||||
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
pinctrl-names = "default";
|
||||
|
||||
user1 {
|
||||
label = "User1 Button";
|
||||
gpios = <&gpio5 1 GPIO_ACTIVE_LOW>;
|
||||
gpio-key,wakeup;
|
||||
linux,code = <KEY_1>;
|
||||
};
|
||||
|
||||
user2 {
|
||||
label = "User2 Button";
|
||||
gpios = <&gpio4 14 GPIO_ACTIVE_LOW>;
|
||||
gpio-key,wakeup;
|
||||
linux,code = <KEY_2>;
|
||||
};
|
||||
};
|
||||
sound {
|
||||
compatible = "fsl,imx6ul-evk-wm8960",
|
||||
"fsl,imx-audio-wm8960";
|
||||
model = "wm8960-audio";
|
||||
cpu-dai = <&sai2>;
|
||||
audio-codec = <&codec>;
|
||||
asrc-controller = <&asrc>;
|
||||
codec-master;
|
||||
gpr = <&gpr 4 0x100000 0x100000>;
|
||||
hp-det = <3 0>;
|
||||
/*hp-det-gpios = <&gpio5 4 0>;
|
||||
mic-det-gpios = <&gpio5 4 0>;*/
|
||||
audio-routing =
|
||||
"Headphone Jack", "HP_L",
|
||||
"Headphone Jack", "HP_R",
|
||||
"Ext Spk", "SPK_LP",
|
||||
"Ext Spk", "SPK_LN",
|
||||
"Ext Spk", "SPK_RP",
|
||||
"Ext Spk", "SPK_RN",
|
||||
"LINPUT2", "Mic Jack",
|
||||
"LINPUT3", "Mic Jack",
|
||||
"RINPUT1", "Main MIC",
|
||||
"RINPUT2", "Main MIC",
|
||||
"Mic Jack", "MICB",
|
||||
"Main MIC", "MICB",
|
||||
"CPU-Playback", "ASRC-Playback",
|
||||
"Playback", "CPU-Playback",
|
||||
"ASRC-Capture", "CPU-Capture",
|
||||
"CPU-Capture", "Capture";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
spi4 {
|
||||
compatible = "spi-gpio";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_spi4>;
|
||||
pinctrl-assert-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
gpio-sck = <&gpio5 11 0>;
|
||||
gpio-mosi = <&gpio5 10 0>;
|
||||
cs-gpios = <&gpio5 7 0>;
|
||||
num-chipselects = <1>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
gpio_spi: gpio_spi@0 {
|
||||
compatible = "fairchild,74hc595";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
reg = <0>;
|
||||
registers-number = <1>;
|
||||
registers-default = /bits/ 8 <0x57>;
|
||||
spi-max-frequency = <10000>;
|
||||
};
|
||||
};
|
||||
|
||||
sii902x_reset: sii902x-reset {
|
||||
compatible = "gpio-reset";
|
||||
reset-gpios = <&gpio_spi 1 GPIO_ACTIVE_LOW>;
|
||||
reset-delay-us = <100000>;
|
||||
#reset-cells = <0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
&gpmi{
|
||||
status = "disabled";
|
||||
};
|
||||
&cpu0 {
|
||||
arm-supply = <®_arm>;
|
||||
soc-supply = <®_soc>;
|
||||
};
|
||||
|
||||
&clks {
|
||||
assigned-clocks = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
|
||||
assigned-clock-rates = <786432000>;
|
||||
};
|
||||
|
||||
&fec1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_enet1>;
|
||||
phy-mode = "rmii";
|
||||
phy-handle = <ðphy0>;
|
||||
phy-reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
|
||||
phy-reset-duration = <26>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&fec2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_enet2>;
|
||||
phy-mode = "rmii";
|
||||
phy-handle = <ðphy1>;
|
||||
phy-reset-gpios = <&gpio5 6 GPIO_ACTIVE_LOW>;
|
||||
phy-reset-duration = <26>;
|
||||
status = "okay";
|
||||
|
||||
mdio {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ethphy0: ethernet-phy@0 {
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
smsc,disable-energy-detect;
|
||||
reg = <0>;
|
||||
};
|
||||
ethphy1: ethernet-phy@1 {
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
smsc,disable-energy-detect;
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&flexcan1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_flexcan1>;
|
||||
xceiver-supply = <®_can_3v3>;
|
||||
status = "okay";
|
||||
};
|
||||
&gpc {
|
||||
fsl,cpu_pupscr_sw2iso = <0x1>;
|
||||
fsl,cpu_pupscr_sw = <0x0>;
|
||||
fsl,cpu_pdnscr_iso2sw = <0x1>;
|
||||
fsl,cpu_pdnscr_iso = <0x1>;
|
||||
fsl,ldo-bypass = <0>; /* DCDC, ldo-enable */
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
clock-frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
clock_frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c2>;
|
||||
status = "okay";
|
||||
|
||||
codec: wm8960@1a {
|
||||
compatible = "wlf,wm8960";
|
||||
reg = <0x1a>;
|
||||
clocks = <&clks IMX6UL_CLK_SAI2>;
|
||||
clock-names = "mclk";
|
||||
wlf,shared-lrclk;
|
||||
};
|
||||
sii902x: sii902x@39 {
|
||||
compatible = "SiI,sii902x";
|
||||
pinctrl-names = "default";
|
||||
reset-names="sii902x";
|
||||
pinctrl-0 = <&pinctrl_sii902x>;
|
||||
resets = <&sii902x_reset>;
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <18 IRQ_TYPE_EDGE_FALLING>;
|
||||
mode_str ="1280x720M@60";
|
||||
bits-per-pixel = <16>;
|
||||
reg = <0x39>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
||||
gt9xx@5d {
|
||||
compatible = "goodix,gt9xx";
|
||||
reg = <0x5d>;
|
||||
status = "okay";
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_tsc_reset &pinctrl_touchscreen_int>;
|
||||
/*pinctrl-1 = <&pinctrl_tsc_irq>;*/
|
||||
/*pinctrl-names = "default", "int-output-low", "int-output-high", "int-input";
|
||||
pinctrl-0 = <&ts_int_default>;
|
||||
pinctrl-1 = <&ts_int_output_low>;
|
||||
pinctrl-2 = <&ts_int_output_high>;
|
||||
pinctrl-3 = <&ts_int_input>;
|
||||
*/
|
||||
reset-gpios = <&gpio5 2 GPIO_ACTIVE_LOW>;
|
||||
irq-gpios = <&gpio1 5 IRQ_TYPE_EDGE_FALLING>;
|
||||
irq-flags = <2>; /*1:rising 2: falling*/
|
||||
|
||||
touchscreen-max-id = <5>;
|
||||
touchscreen-size-x = <800>;
|
||||
touchscreen-size-y = <480>;
|
||||
touchscreen-max-w = <1024>;
|
||||
touchscreen-max-p = <1024>;
|
||||
/*touchscreen-key-map = <172>, <158>;*/ /*KEY_HOMEPAGE, KEY_BACK*/
|
||||
|
||||
goodix,type-a-report = <0>;
|
||||
goodix,driver-send-cfg = <0>;
|
||||
goodix,create-wr-node = <1>;
|
||||
goodix,wakeup-with-reset = <0>;
|
||||
goodix,resume-in-workqueue = <0>;
|
||||
goodix,int-sync = <0>;
|
||||
goodix,swap-x2y = <0>;
|
||||
goodix,esd-protect = <0>;
|
||||
goodix,pen-suppress-finger = <0>;
|
||||
goodix,auto-update = <0>;
|
||||
goodix,auto-update-cfg = <0>;
|
||||
goodix,power-off-sleep = <0>;
|
||||
|
||||
/*7*/
|
||||
goodix,cfg-group0 = [
|
||||
6b 00 04 58 02 05 0d 00 01 0f
|
||||
28 0f 50 32 03 05 00 00 00 00
|
||||
00 00 00 00 00 00 00 8a 2a 0c
|
||||
45 47 0c 08 00 00 00 40 03 2c
|
||||
00 01 00 00 00 03 64 32 00 00
|
||||
00 28 64 94 d5 02 07 00 00 04
|
||||
95 2c 00 8b 34 00 82 3f 00 7d
|
||||
4c 00 7a 5b 00 7a 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 18 16 14 12 10 0e 0c 0a
|
||||
08 06 04 02 ff ff 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 16 18 1c 1d 1e 1f 20 21
|
||||
22 24 13 12 10 0f 0a 08 06 04
|
||||
02 00 ff ff ff ff ff ff 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 79 01
|
||||
];
|
||||
|
||||
/*4.3*/
|
||||
goodix,cfg-group1 = [
|
||||
97 E0 01 10 01 05 0D 00 01 00
|
||||
00 05 5A 46 53 11 00 00 11 11
|
||||
14 14 14 22 0A 04 00 00 00 00
|
||||
00 00 53 00 14 00 00 84 00 00
|
||||
3C 00 00 64 1E 28 87 27 08 32
|
||||
34 05 0D 20 33 60 11 02 24 00
|
||||
00 64 80 80 14 02 00 00 54 89
|
||||
68 85 6D 82 72 80 76 7D 7B 7B
|
||||
00 00 00 00 00 00 00 F0 50 3C
|
||||
FF FF 07 00 00 00 02 14 14 03
|
||||
04 00 21 64 0A 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
32 20 50 3C 3C 00 00 00 00 00
|
||||
0D 06 0C 05 0B 04 0A 03 FF FF
|
||||
FF FF FF FF 00 01 02 03 04 05
|
||||
06 07 08 09 0A 0B 0C 0D FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 3C 00 05 1E 00 02
|
||||
2A 1E 19 14 02 00 03 0A 05 00
|
||||
00 00 00 00 00 00 01 FF FF 86
|
||||
22 03 00 00 33 00 0F 00 00 00
|
||||
50 3C 50 00 00 00 00 2A 01
|
||||
];
|
||||
|
||||
/*5*/
|
||||
goodix,cfg-group2 = [
|
||||
00 20 03 E0 01 05 3C 00 01 08
|
||||
28 0C 50 32 03 05 00 00 00 00
|
||||
00 00 00 17 19 1E 14 8B 2B 0D
|
||||
33 35 0C 08 00 00 00 9A 03 11
|
||||
00 01 00 00 00 00 00 32 00 00
|
||||
00 20 58 94 C5 02 00 00 00 04
|
||||
B0 23 00 93 2B 00 7B 35 00 69
|
||||
41 00 5B 4F 00 5B 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 02 04 06 08 0A 0C 0E 10
|
||||
12 14 16 18 1A FF 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 02 04 06 08 0A 0C 0F
|
||||
10 12 13 16 18 1C 1D 1E 1F 20
|
||||
21 22 24 26 FF FF FF FF 00 00
|
||||
00 FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF 48 01
|
||||
];
|
||||
|
||||
};
|
||||
|
||||
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_hog_1>;
|
||||
imx6ul-evk {
|
||||
pinctrl_hog_1: hoggrp-1 {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059 /* SD1 CD */
|
||||
MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID 0x17059 /* USB OTG1 ID */
|
||||
// MX6UL_PAD_CSI_DATA07__GPIO4_IO28 0x000010B0
|
||||
MX6ULL_PAD_SNVS_TAMPER5__GPIO5_IO05 0x000110A0
|
||||
>;
|
||||
};
|
||||
pinctrl_sii902x: hdmigrp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x59
|
||||
>;
|
||||
};
|
||||
pinctrl_touchscreen_int: lcdif_tsc_int {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_GPIO1_IO05__GPIO1_IO05 0x000010B0
|
||||
>;
|
||||
};
|
||||
pinctrl_enet1: enet1grp {
|
||||
fsl,pins = <
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_enet2: enet2grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_GPIO1_IO06__ENET2_MDIO 0x1b0b0
|
||||
MX6UL_PAD_GPIO1_IO07__ENET2_MDC 0x1b0b0
|
||||
MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN 0x1b0b0
|
||||
MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER 0x1b0b0
|
||||
MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00 0x1b0b0
|
||||
MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01 0x1b0b0
|
||||
MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN 0x1b0b0
|
||||
MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00 0x1b0b0
|
||||
MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01 0x1b0b0
|
||||
MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 0x4001b031
|
||||
MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN 0x1b0b0
|
||||
MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER 0x1b0b0
|
||||
MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0
|
||||
MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0
|
||||
MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN 0x1b0b0
|
||||
MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0
|
||||
MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0
|
||||
MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 0x4001b031
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_flexcan1: flexcan1grp{
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART3_CTS_B__FLEXCAN1_TX 0x000010B0
|
||||
MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX 0x000010B0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c1: i2c1grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0
|
||||
MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x4001b8b0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c2: i2c2grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART5_TX_DATA__I2C2_SCL 0x4001b8b0
|
||||
MX6UL_PAD_UART5_RX_DATA__I2C2_SDA 0x4001b8b0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_ecspi3: ecspi3 {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART2_CTS_B__ECSPI3_MOSI 0x000010B0
|
||||
MX6UL_PAD_UART2_RTS_B__ECSPI3_MISO 0x000010B0
|
||||
MX6UL_PAD_UART2_RX_DATA__ECSPI3_SCLK 0x000010B0
|
||||
//MX6UL_PAD_UART2_TX_DATA__ECSPI3_SS0 0x000010B0
|
||||
MX6UL_PAD_UART2_TX_DATA__GPIO1_IO20 0x000010B0
|
||||
MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0x000010B0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_ecspi1: ecspi1 {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_CSI_DATA04__ECSPI1_SCLK 0x000010B0
|
||||
MX6UL_PAD_CSI_DATA06__ECSPI1_MOSI 0x000010B0
|
||||
MX6UL_PAD_CSI_DATA07__ECSPI1_MISO 0x000010B0
|
||||
MX6UL_PAD_CSI_DATA05__GPIO4_IO26 0x000010B0
|
||||
MX6UL_PAD_CSI_DATA03__GPIO4_IO24 0x000010B0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart3: uart3grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1
|
||||
MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart1: uart1grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1
|
||||
MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart6: uart6grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_CSI_MCLK__UART6_DCE_TX 0x1b0b1
|
||||
MX6UL_PAD_CSI_PIXCLK__UART6_DCE_RX 0x1b0b1
|
||||
>;
|
||||
};
|
||||
|
||||
|
||||
pinctrl_sai2: sai2grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK 0x17088
|
||||
MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC 0x17088
|
||||
MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA 0x11088
|
||||
MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA 0x11088
|
||||
MX6UL_PAD_JTAG_TMS__SAI2_MCLK 0x17088
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_tsc: tscgrp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0xb0
|
||||
MX6UL_PAD_GPIO1_IO02__GPIO1_IO02 0xb0
|
||||
MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0xb0
|
||||
MX6UL_PAD_GPIO1_IO04__GPIO1_IO04 0xb0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc1: usdhc1grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x17059
|
||||
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x10071
|
||||
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059
|
||||
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059
|
||||
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059
|
||||
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc1_100mhz: usdhc1grp100mhz {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x170b9
|
||||
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x100b9
|
||||
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170b9
|
||||
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170b9
|
||||
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170b9
|
||||
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170b9
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc1_200mhz: usdhc1grp200mhz {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x170f9
|
||||
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x100f9
|
||||
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170f9
|
||||
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170f9
|
||||
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170f9
|
||||
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170f9
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2: usdhc2grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_NAND_RE_B__USDHC2_CLK 0x10069
|
||||
MX6UL_PAD_NAND_WE_B__USDHC2_CMD 0x17059
|
||||
MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
|
||||
MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
|
||||
MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
|
||||
MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_8bit: usdhc2grp_8bit {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_NAND_RE_B__USDHC2_CLK 0x10069
|
||||
MX6UL_PAD_NAND_WE_B__USDHC2_CMD 0x17059
|
||||
MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
|
||||
MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
|
||||
MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
|
||||
MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
|
||||
MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x17059
|
||||
MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x17059
|
||||
MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x17059
|
||||
MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x17059
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_8bit_100mhz: usdhc2grp_8bit_100mhz {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_NAND_RE_B__USDHC2_CLK 0x100b9
|
||||
MX6UL_PAD_NAND_WE_B__USDHC2_CMD 0x170b9
|
||||
MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x170b9
|
||||
MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x170b9
|
||||
MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x170b9
|
||||
MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x170b9
|
||||
MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x170b9
|
||||
MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x170b9
|
||||
MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x170b9
|
||||
MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x170b9
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_8bit_200mhz: usdhc2grp_8bit_200mhz {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_NAND_RE_B__USDHC2_CLK 0x100f9
|
||||
MX6UL_PAD_NAND_WE_B__USDHC2_CMD 0x170f9
|
||||
MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x170f9
|
||||
MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x170f9
|
||||
MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x170f9
|
||||
MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x170f9
|
||||
MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x170f9
|
||||
MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x170f9
|
||||
MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x170f9
|
||||
MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x170f9
|
||||
>;
|
||||
};
|
||||
pinctrl_lcdif_dat: lcdifdatgrp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_LCD_DATA00__LCDIF_DATA00 0x79
|
||||
MX6UL_PAD_LCD_DATA01__LCDIF_DATA01 0x79
|
||||
MX6UL_PAD_LCD_DATA02__LCDIF_DATA02 0x79
|
||||
MX6UL_PAD_LCD_DATA03__LCDIF_DATA03 0x79
|
||||
MX6UL_PAD_LCD_DATA04__LCDIF_DATA04 0x79
|
||||
MX6UL_PAD_LCD_DATA05__LCDIF_DATA05 0x79
|
||||
MX6UL_PAD_LCD_DATA06__LCDIF_DATA06 0x79
|
||||
MX6UL_PAD_LCD_DATA07__LCDIF_DATA07 0x79
|
||||
MX6UL_PAD_LCD_DATA08__LCDIF_DATA08 0x79
|
||||
MX6UL_PAD_LCD_DATA09__LCDIF_DATA09 0x79
|
||||
MX6UL_PAD_LCD_DATA10__LCDIF_DATA10 0x79
|
||||
MX6UL_PAD_LCD_DATA11__LCDIF_DATA11 0x79
|
||||
MX6UL_PAD_LCD_DATA12__LCDIF_DATA12 0x79
|
||||
MX6UL_PAD_LCD_DATA13__LCDIF_DATA13 0x79
|
||||
MX6UL_PAD_LCD_DATA14__LCDIF_DATA14 0x79
|
||||
MX6UL_PAD_LCD_DATA15__LCDIF_DATA15 0x79
|
||||
MX6UL_PAD_LCD_DATA16__LCDIF_DATA16 0x79
|
||||
MX6UL_PAD_LCD_DATA17__LCDIF_DATA17 0x79
|
||||
MX6UL_PAD_LCD_DATA18__LCDIF_DATA18 0x79
|
||||
MX6UL_PAD_LCD_DATA19__LCDIF_DATA19 0x79
|
||||
MX6UL_PAD_LCD_DATA20__LCDIF_DATA20 0x79
|
||||
MX6UL_PAD_LCD_DATA21__LCDIF_DATA21 0x79
|
||||
MX6UL_PAD_LCD_DATA22__LCDIF_DATA22 0x79
|
||||
MX6UL_PAD_LCD_DATA23__LCDIF_DATA23 0x79
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_lcdif_dat_16bits: lcdifdatgrp_16bits {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_LCD_DATA00__LCDIF_DATA00 0x79
|
||||
MX6UL_PAD_LCD_DATA01__LCDIF_DATA01 0x79
|
||||
MX6UL_PAD_LCD_DATA02__LCDIF_DATA02 0x79
|
||||
MX6UL_PAD_LCD_DATA03__LCDIF_DATA03 0x79
|
||||
MX6UL_PAD_LCD_DATA04__LCDIF_DATA04 0x79
|
||||
MX6UL_PAD_LCD_DATA05__LCDIF_DATA05 0x79
|
||||
MX6UL_PAD_LCD_DATA06__LCDIF_DATA06 0x79
|
||||
MX6UL_PAD_LCD_DATA07__LCDIF_DATA07 0x79
|
||||
MX6UL_PAD_LCD_DATA08__LCDIF_DATA08 0x79
|
||||
MX6UL_PAD_LCD_DATA09__LCDIF_DATA09 0x79
|
||||
MX6UL_PAD_LCD_DATA10__LCDIF_DATA10 0x79
|
||||
MX6UL_PAD_LCD_DATA11__LCDIF_DATA11 0x79
|
||||
MX6UL_PAD_LCD_DATA12__LCDIF_DATA12 0x79
|
||||
MX6UL_PAD_LCD_DATA13__LCDIF_DATA13 0x79
|
||||
MX6UL_PAD_LCD_DATA14__LCDIF_DATA14 0x79
|
||||
MX6UL_PAD_LCD_DATA15__LCDIF_DATA15 0x79
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_lcdif_ctrl: lcdifctrlgrp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_LCD_CLK__LCDIF_CLK 0x79
|
||||
MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE 0x79
|
||||
MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC 0x79
|
||||
MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC 0x79
|
||||
>;
|
||||
};
|
||||
pinctrl_pwm1: pwm1grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_GPIO1_IO08__PWM1_OUT 0x110b0
|
||||
>;
|
||||
};
|
||||
pinctrl_lcdif_reset: lcdifresetgrp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_LCD_RESET__GPIO3_IO04 0x1b0b0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_adc1: adc1grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x000010B1
|
||||
MX6UL_PAD_GPIO1_IO04__GPIO1_IO04 0x000010B1
|
||||
>;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
&iomuxc_snvs {
|
||||
pinctrl-names = "default_snvs";
|
||||
pinctrl-0 = <&pinctrl_hog_2>;
|
||||
imx6ul-evk {
|
||||
pinctrl_hog_2: hoggrp-2 {
|
||||
fsl,pins = <
|
||||
MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x1b0b0 /* enet1 reset */
|
||||
MX6ULL_PAD_SNVS_TAMPER6__GPIO5_IO06 0x1b0b0 /* enet2 reset */
|
||||
MX6ULL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x000110A0 /*key 1*/
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_tsc_reset: tscresetgrp { /*!< Function assigned for the core: Cortex-A7[ca7] */
|
||||
fsl,pins = <
|
||||
MX6ULL_PAD_SNVS_TAMPER2__GPIO5_IO02 0x000110A0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_spi4: spi4grp {
|
||||
fsl,pins = <
|
||||
MX6ULL_PAD_BOOT_MODE0__GPIO5_IO10 0x70a1
|
||||
MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11 0x70a1
|
||||
MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x70a1
|
||||
MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x80000000
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_leds: ledgrp {
|
||||
fsl,pins = <
|
||||
MX6ULL_PAD_SNVS_TAMPER3__GPIO5_IO03 0x000110A0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_485_ctl: uart3_rs485 {
|
||||
fsl,pins = <
|
||||
MX6ULL_PAD_SNVS_TAMPER0__GPIO5_IO00 0x1b0b0
|
||||
>;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
&lcdif {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_lcdif_dat
|
||||
&pinctrl_lcdif_ctrl
|
||||
&pinctrl_lcdif_reset>;
|
||||
display = <&display0>;
|
||||
status = "okay";
|
||||
reset-gpios = <&gpio3 4 GPIO_ACTIVE_LOW>; /* 100ask */
|
||||
|
||||
display0: display {
|
||||
bits-per-pixel = <24>;
|
||||
bus-width = <24>;
|
||||
|
||||
display-timings {
|
||||
native-mode = <&timing0>;
|
||||
|
||||
timing0: timing0_1024x768 {
|
||||
clock-frequency = <50000000>;
|
||||
hactive = <1024>;
|
||||
vactive = <600>;
|
||||
hfront-porch = <160>;
|
||||
hback-porch = <140>;
|
||||
hsync-len = <20>;
|
||||
vback-porch = <20>;
|
||||
vfront-porch = <12>;
|
||||
vsync-len = <3>;
|
||||
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
de-active = <1>;
|
||||
pixelclk-active = <0>;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pwm1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_pwm1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pxp {
|
||||
status = "okay";
|
||||
};
|
||||
&ecspi3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_ecspi3>;
|
||||
cs-gpios = <&gpio1 20 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
|
||||
|
||||
spidev: icm20608@0{
|
||||
compatible = "invensense,icm20608";
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <1 1>;
|
||||
spi-max-frequency = <8000000>;
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
&sai2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_sai2>;
|
||||
|
||||
assigned-clocks = <&clks IMX6UL_CLK_SAI2_SEL>,
|
||||
<&clks IMX6UL_CLK_SAI2>;
|
||||
assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
|
||||
assigned-clock-rates = <0>, <12288000>;
|
||||
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&tsc {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_tsc>;
|
||||
xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
|
||||
measure-delay-time = <0xfffff>;
|
||||
pre-charge-time = <0xffff>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart1>;
|
||||
status = "okay";
|
||||
};
|
||||
&uart3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart3
|
||||
&pinctrl_485_ctl>;
|
||||
rts-gpio = <&gpio5 0 GPIO_ACTIVE_LOW>;
|
||||
uart-has-rtscts;
|
||||
rs485-rx-during-tx;
|
||||
rs485-rts-delay = <0 0>;
|
||||
linux,rs485-enabled-at-boot-time;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart6 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart6>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
||||
&usbotg1 {
|
||||
dr_mode = "otg";
|
||||
srp-disable;
|
||||
hnp-disable;
|
||||
adp-disable;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbotg2 {
|
||||
dr_mode = "host";
|
||||
disable-over-current;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphy1 {
|
||||
tx-d-cal = <0x5>;
|
||||
};
|
||||
|
||||
&usbphy2 {
|
||||
tx-d-cal = <0x5>;
|
||||
};
|
||||
|
||||
&usdhc1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usdhc1>;
|
||||
cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
|
||||
keep-power-in-suspend;
|
||||
enable-sdio-wakeup;
|
||||
bus-width = <4>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usdhc2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usdhc2_8bit>;
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&wdog1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&adc1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_adc1>;
|
||||
num-channels = <5>;
|
||||
vref-supply = <®_can_3v3>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ecspi1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_ecspi1>;
|
||||
|
||||
fsl,spi-num-chipselects = <2>;
|
||||
cs-gpios = <&gpio4 26 GPIO_ACTIVE_LOW>, <&gpio4 24 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
/*
|
||||
spidev0: spi@0 {
|
||||
compatible = "rohm,dh2228fv";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <5000000>;
|
||||
};
|
||||
|
||||
spidev1: spi@1 {
|
||||
compatible = "rohm,dh2228fv";
|
||||
reg = <1>;
|
||||
spi-max-frequency = <5000000>;
|
||||
};
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,146 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <modbus.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define DO_BEEP1 0
|
||||
#define DO_BEEP2 1
|
||||
#define DO_LED1 2
|
||||
#define DO_LED2 3
|
||||
#define DO_LED3 4
|
||||
#define AI_TEMP 0
|
||||
#define AI_HUMI 1
|
||||
|
||||
void usage(const char *progname) {
|
||||
printf("Usage: %s <device> <command>\n", progname);
|
||||
printf("Commands:\n");
|
||||
printf(" beep1 on/off\n");
|
||||
printf(" beep2 on/off\n");
|
||||
printf(" led1 on/off\n");
|
||||
printf(" led2 on/off\n");
|
||||
printf(" led3 on/off\n");
|
||||
printf(" temp\n");
|
||||
printf(" humi\n");
|
||||
}
|
||||
|
||||
int set_digital_output(modbus_t *ctx, int addr, int value) {
|
||||
return modbus_write_bit(ctx, addr, value);
|
||||
}
|
||||
|
||||
int get_analog_input(modbus_t *ctx, int addr, float *value) {
|
||||
uint16_t reg;
|
||||
int rc = modbus_read_input_registers(ctx, addr, 1, ®);
|
||||
if (rc == -1) {
|
||||
return -1;
|
||||
}
|
||||
*value = (float)reg / 10.0; // Assuming 10x scaling for temperature and humidity
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 3) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
modbus_t *ctx;
|
||||
int rc;
|
||||
|
||||
// 创建Modbus上下文
|
||||
ctx = modbus_new_rtu(argv[1], 115200, 'N', 8, 1);
|
||||
if (ctx == NULL) {
|
||||
fprintf(stderr, "Unable to create the libmodbus context\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
modbus_set_debug(ctx, TRUE);
|
||||
|
||||
// 设置Modbus从站地址为3
|
||||
rc = modbus_set_slave(ctx, 3);
|
||||
if (rc == -1) {
|
||||
fprintf(stderr, "Failed to set slave address: %s\n", modbus_strerror(errno));
|
||||
modbus_free(ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 连接到Modbus设备
|
||||
if (modbus_connect(ctx) == -1) {
|
||||
fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
|
||||
modbus_free(ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 设置Modbus RTU模式为RS-485
|
||||
rc = modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485);
|
||||
if (rc == -1) {
|
||||
fprintf(stderr, "Failed to set RS-485 mode: %s\n", modbus_strerror(errno));
|
||||
modbus_free(ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (strcmp(argv[2], "beep1") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_BEEP1, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "beep2") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_BEEP2, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "led1") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_LED1, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "led2") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_LED2, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "led3") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_LED3, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "temp") == 0) {
|
||||
if (argc != 3) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
float temp;
|
||||
rc = get_analog_input(ctx, AI_TEMP, &temp);
|
||||
if (rc == 0) {
|
||||
printf("Temperature: %.1f C\n", temp);
|
||||
}
|
||||
} else if (strcmp(argv[2], "humi") == 0) {
|
||||
if (argc != 3) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
float humi;
|
||||
rc = get_analog_input(ctx, AI_HUMI, &humi);
|
||||
if (rc == 0) {
|
||||
printf("Humidity: %.1f %%\n", humi);
|
||||
}
|
||||
} else {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rc == -1) {
|
||||
fprintf(stderr, "%s\n", modbus_strerror(errno));
|
||||
}
|
||||
|
||||
// 关闭连接并释放资源
|
||||
modbus_close(ctx);
|
||||
modbus_free(ctx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
arm-buildroot-linux-gnueabihf-gcc -I /home/book/sensor_test/libmodbus-3.1.10/tmp/include/modbus -L/home/book/sensor_test/libmodbus-3.1.10/tmp/lib -lmodbus -o sensor_test sensor_test.c
|
||||
Binary file not shown.
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
cd /etc/openocd/scripts
|
||||
openocd -f interface/stlink.cfg -f target/stm32f0x.cfg -c init -c halt -c "flash write_image erase /root/demo.bin 0x08000000" -c reset -c shutdown
|
||||
@@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
|
||||
# 判断参数数量
|
||||
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
|
||||
echo "Usage: /bin/sensor_test.sh [led1|led2|led3|beep1|beep2|humi|temp] [on|off]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
device="/dev/ttymxc2"
|
||||
|
||||
# 判断第一个参数
|
||||
case $1 in
|
||||
led1|led2|led3|beep1|beep2)
|
||||
# 判断是否为 led 或 beep 命令
|
||||
if [ $# -eq 2 ] && [[ "$2" == "on" || "$2" == "off" ]]; then
|
||||
# 调用传感器测试程序
|
||||
/bin/sensor_test "$device" "$1" "$2"
|
||||
else
|
||||
echo "Error: Invalid command for $1. Use 'on' or 'off'."
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
humi|temp)
|
||||
# 判断是否为 humi 或 temp 命令
|
||||
if [ $# -eq 1 ]; then
|
||||
# 调用传感器测试程序
|
||||
result=$(/bin/sensor_test "$device" "$1")
|
||||
|
||||
# 使用 grep 和 sed 提取数值
|
||||
if [ "$1" == "temp" ]; then
|
||||
value=$(echo "$result" | grep -oP "Temperature: \K[0-9]+\.[0-9]+")
|
||||
elif [ "$1" == "humi" ]; then
|
||||
value=$(echo "$result" | grep -oP "Humidity: \K[0-9]+\.[0-9]+")
|
||||
fi
|
||||
# 输出结果
|
||||
echo "$value"
|
||||
|
||||
else
|
||||
echo "Error: Invalid command for $1. No additional arguments needed."
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Error: Invalid device. Use led1, led2, beep1, beep2, humi, or temp."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
cd /etc/openocd/scripts
|
||||
openocd -f interface/stlink.cfg -f target/stm32f0x.cfg -c init -c halt -c "flash write_image erase /root/demo.bin 0x08000000" -c reset -c shutdown
|
||||
Binary file not shown.
@@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
|
||||
# 判断参数数量
|
||||
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
|
||||
echo "Usage: /bin/sensor_test.sh [led1|led2|led3|beep1|beep2|humi|temp] [on|off]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
device="/dev/ttymxc2"
|
||||
|
||||
# 判断第一个参数
|
||||
case $1 in
|
||||
led1|led2|led3|beep1|beep2)
|
||||
# 判断是否为 led 或 beep 命令
|
||||
if [ $# -eq 2 ] && [[ "$2" == "on" || "$2" == "off" ]]; then
|
||||
# 调用传感器测试程序
|
||||
/bin/sensor_test "$device" "$1" "$2"
|
||||
else
|
||||
echo "Error: Invalid command for $1. Use 'on' or 'off'."
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
humi|temp)
|
||||
# 判断是否为 humi 或 temp 命令
|
||||
if [ $# -eq 1 ]; then
|
||||
# 调用传感器测试程序
|
||||
result=$(/bin/sensor_test "$device" "$1")
|
||||
|
||||
# 使用 grep 和 sed 提取数值
|
||||
if [ "$1" == "temp" ]; then
|
||||
value=$(echo "$result" | grep -oP "Temperature: \K[0-9]+\.[0-9]+")
|
||||
elif [ "$1" == "humi" ]; then
|
||||
value=$(echo "$result" | grep -oP "Humidity: \K[0-9]+\.[0-9]+")
|
||||
fi
|
||||
# 输出结果
|
||||
echo "$value"
|
||||
|
||||
else
|
||||
echo "Error: Invalid command for $1. No additional arguments needed."
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Error: Invalid device. Use led1, led2, beep1, beep2, humi, or temp."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,924 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include "imx6ull.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Freescale i.MX6 ULL 14x14 EVK Board";
|
||||
compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";
|
||||
|
||||
chosen {
|
||||
stdout-path = &uart1;
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x80000000 0x20000000>;
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
linux,cma {
|
||||
compatible = "shared-dma-pool";
|
||||
reusable;
|
||||
size = <0x14000000>;
|
||||
linux,cma-default;
|
||||
};
|
||||
};
|
||||
|
||||
backlight {
|
||||
compatible = "pwm-backlight";
|
||||
pwms = <&pwm1 0 1000>;
|
||||
brightness-levels = <0 1 2 3 4 5 6 8 10>;
|
||||
default-brightness-level = <8>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
pxp_v4l2 {
|
||||
compatible = "fsl,imx6ul-pxp-v4l2", "fsl,imx6sx-pxp-v4l2", "fsl,imx6sl-pxp-v4l2";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
regulators {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
reg_can_3v3: regulator@0 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <0>;
|
||||
regulator-name = "can-3v3";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
};
|
||||
|
||||
reg_usb_ltemodule: regulator@1 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "ltemodule-pwr";
|
||||
regulator-min-microvolt = <3800000>;
|
||||
regulator-max-microvolt = <3800000>;
|
||||
gpios = <&gpio5 5 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
reg_gpio_wifi: regulator@2 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "wifi-pwr";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_leds>;
|
||||
|
||||
status = "disabled";
|
||||
|
||||
led0: cpu {
|
||||
label = "cpu";
|
||||
gpios = <&gpio5 3 GPIO_ACTIVE_LOW>;
|
||||
default-state = "on";
|
||||
linux,default-trigger = "heartbeat";
|
||||
};
|
||||
};
|
||||
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
pinctrl-names = "default";
|
||||
|
||||
user1 {
|
||||
label = "User1 Button";
|
||||
gpios = <&gpio5 1 GPIO_ACTIVE_LOW>;
|
||||
gpio-key,wakeup;
|
||||
linux,code = <KEY_1>;
|
||||
};
|
||||
|
||||
user2 {
|
||||
label = "User2 Button";
|
||||
gpios = <&gpio4 14 GPIO_ACTIVE_LOW>;
|
||||
gpio-key,wakeup;
|
||||
linux,code = <KEY_2>;
|
||||
};
|
||||
};
|
||||
sound {
|
||||
compatible = "fsl,imx6ul-evk-wm8960",
|
||||
"fsl,imx-audio-wm8960";
|
||||
model = "wm8960-audio";
|
||||
cpu-dai = <&sai2>;
|
||||
audio-codec = <&codec>;
|
||||
asrc-controller = <&asrc>;
|
||||
codec-master;
|
||||
gpr = <&gpr 4 0x100000 0x100000>;
|
||||
hp-det = <3 0>;
|
||||
/*hp-det-gpios = <&gpio5 4 0>;
|
||||
mic-det-gpios = <&gpio5 4 0>;*/
|
||||
audio-routing =
|
||||
"Headphone Jack", "HP_L",
|
||||
"Headphone Jack", "HP_R",
|
||||
"Ext Spk", "SPK_LP",
|
||||
"Ext Spk", "SPK_LN",
|
||||
"Ext Spk", "SPK_RP",
|
||||
"Ext Spk", "SPK_RN",
|
||||
"LINPUT2", "Mic Jack",
|
||||
"LINPUT3", "Mic Jack",
|
||||
"RINPUT1", "Main MIC",
|
||||
"RINPUT2", "Main MIC",
|
||||
"Mic Jack", "MICB",
|
||||
"Main MIC", "MICB",
|
||||
"CPU-Playback", "ASRC-Playback",
|
||||
"Playback", "CPU-Playback",
|
||||
"ASRC-Capture", "CPU-Capture",
|
||||
"CPU-Capture", "Capture";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
spi4 {
|
||||
compatible = "spi-gpio";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_spi4>;
|
||||
pinctrl-assert-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
gpio-sck = <&gpio5 11 0>;
|
||||
gpio-mosi = <&gpio5 10 0>;
|
||||
cs-gpios = <&gpio5 7 0>;
|
||||
num-chipselects = <1>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
gpio_spi: gpio_spi@0 {
|
||||
compatible = "fairchild,74hc595";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
reg = <0>;
|
||||
registers-number = <1>;
|
||||
registers-default = /bits/ 8 <0x57>;
|
||||
spi-max-frequency = <10000>;
|
||||
};
|
||||
};
|
||||
|
||||
sii902x_reset: sii902x-reset {
|
||||
compatible = "gpio-reset";
|
||||
reset-gpios = <&gpio_spi 1 GPIO_ACTIVE_LOW>;
|
||||
reset-delay-us = <100000>;
|
||||
#reset-cells = <0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
&gpmi{
|
||||
status = "disabled";
|
||||
};
|
||||
&cpu0 {
|
||||
arm-supply = <®_arm>;
|
||||
soc-supply = <®_soc>;
|
||||
};
|
||||
|
||||
&clks {
|
||||
assigned-clocks = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
|
||||
assigned-clock-rates = <786432000>;
|
||||
};
|
||||
|
||||
&fec1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_enet1>;
|
||||
phy-mode = "rmii";
|
||||
phy-handle = <ðphy0>;
|
||||
phy-reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
|
||||
phy-reset-duration = <26>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&fec2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_enet2>;
|
||||
phy-mode = "rmii";
|
||||
phy-handle = <ðphy1>;
|
||||
phy-reset-gpios = <&gpio5 6 GPIO_ACTIVE_LOW>;
|
||||
phy-reset-duration = <26>;
|
||||
status = "okay";
|
||||
|
||||
mdio {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ethphy0: ethernet-phy@0 {
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
smsc,disable-energy-detect;
|
||||
reg = <0>;
|
||||
};
|
||||
ethphy1: ethernet-phy@1 {
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
smsc,disable-energy-detect;
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&flexcan1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_flexcan1>;
|
||||
xceiver-supply = <®_can_3v3>;
|
||||
status = "okay";
|
||||
};
|
||||
&gpc {
|
||||
fsl,cpu_pupscr_sw2iso = <0x1>;
|
||||
fsl,cpu_pupscr_sw = <0x0>;
|
||||
fsl,cpu_pdnscr_iso2sw = <0x1>;
|
||||
fsl,cpu_pdnscr_iso = <0x1>;
|
||||
fsl,ldo-bypass = <0>; /* DCDC, ldo-enable */
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
clock-frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
clock_frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c2>;
|
||||
status = "okay";
|
||||
|
||||
codec: wm8960@1a {
|
||||
compatible = "wlf,wm8960";
|
||||
reg = <0x1a>;
|
||||
clocks = <&clks IMX6UL_CLK_SAI2>;
|
||||
clock-names = "mclk";
|
||||
wlf,shared-lrclk;
|
||||
};
|
||||
sii902x: sii902x@39 {
|
||||
compatible = "SiI,sii902x";
|
||||
pinctrl-names = "default";
|
||||
reset-names="sii902x";
|
||||
pinctrl-0 = <&pinctrl_sii902x>;
|
||||
resets = <&sii902x_reset>;
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <18 IRQ_TYPE_EDGE_FALLING>;
|
||||
mode_str ="1280x720M@60";
|
||||
bits-per-pixel = <16>;
|
||||
reg = <0x39>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
||||
gt9xx@5d {
|
||||
compatible = "goodix,gt9xx";
|
||||
reg = <0x5d>;
|
||||
status = "okay";
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_tsc_reset &pinctrl_touchscreen_int>;
|
||||
/*pinctrl-1 = <&pinctrl_tsc_irq>;*/
|
||||
/*pinctrl-names = "default", "int-output-low", "int-output-high", "int-input";
|
||||
pinctrl-0 = <&ts_int_default>;
|
||||
pinctrl-1 = <&ts_int_output_low>;
|
||||
pinctrl-2 = <&ts_int_output_high>;
|
||||
pinctrl-3 = <&ts_int_input>;
|
||||
*/
|
||||
reset-gpios = <&gpio5 2 GPIO_ACTIVE_LOW>;
|
||||
irq-gpios = <&gpio1 5 IRQ_TYPE_EDGE_FALLING>;
|
||||
irq-flags = <2>; /*1:rising 2: falling*/
|
||||
|
||||
touchscreen-max-id = <5>;
|
||||
touchscreen-size-x = <800>;
|
||||
touchscreen-size-y = <480>;
|
||||
touchscreen-max-w = <1024>;
|
||||
touchscreen-max-p = <1024>;
|
||||
/*touchscreen-key-map = <172>, <158>;*/ /*KEY_HOMEPAGE, KEY_BACK*/
|
||||
|
||||
goodix,type-a-report = <0>;
|
||||
goodix,driver-send-cfg = <0>;
|
||||
goodix,create-wr-node = <1>;
|
||||
goodix,wakeup-with-reset = <0>;
|
||||
goodix,resume-in-workqueue = <0>;
|
||||
goodix,int-sync = <0>;
|
||||
goodix,swap-x2y = <0>;
|
||||
goodix,esd-protect = <0>;
|
||||
goodix,pen-suppress-finger = <0>;
|
||||
goodix,auto-update = <0>;
|
||||
goodix,auto-update-cfg = <0>;
|
||||
goodix,power-off-sleep = <0>;
|
||||
|
||||
/*7*/
|
||||
goodix,cfg-group0 = [
|
||||
6b 00 04 58 02 05 0d 00 01 0f
|
||||
28 0f 50 32 03 05 00 00 00 00
|
||||
00 00 00 00 00 00 00 8a 2a 0c
|
||||
45 47 0c 08 00 00 00 40 03 2c
|
||||
00 01 00 00 00 03 64 32 00 00
|
||||
00 28 64 94 d5 02 07 00 00 04
|
||||
95 2c 00 8b 34 00 82 3f 00 7d
|
||||
4c 00 7a 5b 00 7a 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 18 16 14 12 10 0e 0c 0a
|
||||
08 06 04 02 ff ff 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 16 18 1c 1d 1e 1f 20 21
|
||||
22 24 13 12 10 0f 0a 08 06 04
|
||||
02 00 ff ff ff ff ff ff 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 79 01
|
||||
];
|
||||
|
||||
/*4.3*/
|
||||
goodix,cfg-group1 = [
|
||||
97 E0 01 10 01 05 0D 00 01 00
|
||||
00 05 5A 46 53 11 00 00 11 11
|
||||
14 14 14 22 0A 04 00 00 00 00
|
||||
00 00 53 00 14 00 00 84 00 00
|
||||
3C 00 00 64 1E 28 87 27 08 32
|
||||
34 05 0D 20 33 60 11 02 24 00
|
||||
00 64 80 80 14 02 00 00 54 89
|
||||
68 85 6D 82 72 80 76 7D 7B 7B
|
||||
00 00 00 00 00 00 00 F0 50 3C
|
||||
FF FF 07 00 00 00 02 14 14 03
|
||||
04 00 21 64 0A 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
32 20 50 3C 3C 00 00 00 00 00
|
||||
0D 06 0C 05 0B 04 0A 03 FF FF
|
||||
FF FF FF FF 00 01 02 03 04 05
|
||||
06 07 08 09 0A 0B 0C 0D FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 3C 00 05 1E 00 02
|
||||
2A 1E 19 14 02 00 03 0A 05 00
|
||||
00 00 00 00 00 00 01 FF FF 86
|
||||
22 03 00 00 33 00 0F 00 00 00
|
||||
50 3C 50 00 00 00 00 2A 01
|
||||
];
|
||||
|
||||
/*5*/
|
||||
goodix,cfg-group2 = [
|
||||
00 20 03 E0 01 05 3C 00 01 08
|
||||
28 0C 50 32 03 05 00 00 00 00
|
||||
00 00 00 17 19 1E 14 8B 2B 0D
|
||||
33 35 0C 08 00 00 00 9A 03 11
|
||||
00 01 00 00 00 00 00 32 00 00
|
||||
00 20 58 94 C5 02 00 00 00 04
|
||||
B0 23 00 93 2B 00 7B 35 00 69
|
||||
41 00 5B 4F 00 5B 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 02 04 06 08 0A 0C 0E 10
|
||||
12 14 16 18 1A FF 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 02 04 06 08 0A 0C 0F
|
||||
10 12 13 16 18 1C 1D 1E 1F 20
|
||||
21 22 24 26 FF FF FF FF 00 00
|
||||
00 FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF 48 01
|
||||
];
|
||||
|
||||
};
|
||||
|
||||
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_hog_1>;
|
||||
imx6ul-evk {
|
||||
pinctrl_hog_1: hoggrp-1 {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059 /* SD1 CD */
|
||||
MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID 0x17059 /* USB OTG1 ID */
|
||||
// MX6UL_PAD_CSI_DATA07__GPIO4_IO28 0x000010B0
|
||||
MX6ULL_PAD_SNVS_TAMPER5__GPIO5_IO05 0x000110A0
|
||||
>;
|
||||
};
|
||||
pinctrl_sii902x: hdmigrp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x59
|
||||
>;
|
||||
};
|
||||
pinctrl_touchscreen_int: lcdif_tsc_int {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_GPIO1_IO05__GPIO1_IO05 0x000010B0
|
||||
>;
|
||||
};
|
||||
pinctrl_enet1: enet1grp {
|
||||
fsl,pins = <
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_enet2: enet2grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_GPIO1_IO06__ENET2_MDIO 0x1b0b0
|
||||
MX6UL_PAD_GPIO1_IO07__ENET2_MDC 0x1b0b0
|
||||
MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN 0x1b0b0
|
||||
MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER 0x1b0b0
|
||||
MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00 0x1b0b0
|
||||
MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01 0x1b0b0
|
||||
MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN 0x1b0b0
|
||||
MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00 0x1b0b0
|
||||
MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01 0x1b0b0
|
||||
MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 0x4001b031
|
||||
MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN 0x1b0b0
|
||||
MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER 0x1b0b0
|
||||
MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0
|
||||
MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0
|
||||
MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN 0x1b0b0
|
||||
MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0
|
||||
MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0
|
||||
MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 0x4001b031
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_flexcan1: flexcan1grp{
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART3_CTS_B__FLEXCAN1_TX 0x000010B0
|
||||
MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX 0x000010B0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c1: i2c1grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0
|
||||
MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x4001b8b0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c2: i2c2grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART5_TX_DATA__I2C2_SCL 0x4001b8b0
|
||||
MX6UL_PAD_UART5_RX_DATA__I2C2_SDA 0x4001b8b0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_ecspi3: ecspi3 {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART2_CTS_B__ECSPI3_MOSI 0x000010B0
|
||||
MX6UL_PAD_UART2_RTS_B__ECSPI3_MISO 0x000010B0
|
||||
MX6UL_PAD_UART2_RX_DATA__ECSPI3_SCLK 0x000010B0
|
||||
//MX6UL_PAD_UART2_TX_DATA__ECSPI3_SS0 0x000010B0
|
||||
MX6UL_PAD_UART2_TX_DATA__GPIO1_IO20 0x000010B0
|
||||
MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0x000010B0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_ecspi1: ecspi1 {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_CSI_DATA04__ECSPI1_SCLK 0x000010B0
|
||||
MX6UL_PAD_CSI_DATA06__ECSPI1_MOSI 0x000010B0
|
||||
MX6UL_PAD_CSI_DATA07__ECSPI1_MISO 0x000010B0
|
||||
MX6UL_PAD_CSI_DATA05__GPIO4_IO26 0x000010B0
|
||||
MX6UL_PAD_CSI_DATA03__GPIO4_IO24 0x000010B0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart3: uart3grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1
|
||||
MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart1: uart1grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1
|
||||
MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart6: uart6grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_CSI_MCLK__UART6_DCE_TX 0x1b0b1
|
||||
MX6UL_PAD_CSI_PIXCLK__UART6_DCE_RX 0x1b0b1
|
||||
>;
|
||||
};
|
||||
|
||||
|
||||
pinctrl_sai2: sai2grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK 0x17088
|
||||
MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC 0x17088
|
||||
MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA 0x11088
|
||||
MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA 0x11088
|
||||
MX6UL_PAD_JTAG_TMS__SAI2_MCLK 0x17088
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_tsc: tscgrp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0xb0
|
||||
MX6UL_PAD_GPIO1_IO02__GPIO1_IO02 0xb0
|
||||
MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0xb0
|
||||
MX6UL_PAD_GPIO1_IO04__GPIO1_IO04 0xb0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc1: usdhc1grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x17059
|
||||
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x10071
|
||||
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059
|
||||
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059
|
||||
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059
|
||||
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc1_100mhz: usdhc1grp100mhz {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x170b9
|
||||
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x100b9
|
||||
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170b9
|
||||
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170b9
|
||||
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170b9
|
||||
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170b9
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc1_200mhz: usdhc1grp200mhz {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x170f9
|
||||
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x100f9
|
||||
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170f9
|
||||
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170f9
|
||||
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170f9
|
||||
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170f9
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2: usdhc2grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_NAND_RE_B__USDHC2_CLK 0x10069
|
||||
MX6UL_PAD_NAND_WE_B__USDHC2_CMD 0x17059
|
||||
MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
|
||||
MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
|
||||
MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
|
||||
MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_8bit: usdhc2grp_8bit {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_NAND_RE_B__USDHC2_CLK 0x10069
|
||||
MX6UL_PAD_NAND_WE_B__USDHC2_CMD 0x17059
|
||||
MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
|
||||
MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
|
||||
MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
|
||||
MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
|
||||
MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x17059
|
||||
MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x17059
|
||||
MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x17059
|
||||
MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x17059
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_8bit_100mhz: usdhc2grp_8bit_100mhz {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_NAND_RE_B__USDHC2_CLK 0x100b9
|
||||
MX6UL_PAD_NAND_WE_B__USDHC2_CMD 0x170b9
|
||||
MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x170b9
|
||||
MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x170b9
|
||||
MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x170b9
|
||||
MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x170b9
|
||||
MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x170b9
|
||||
MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x170b9
|
||||
MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x170b9
|
||||
MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x170b9
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_8bit_200mhz: usdhc2grp_8bit_200mhz {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_NAND_RE_B__USDHC2_CLK 0x100f9
|
||||
MX6UL_PAD_NAND_WE_B__USDHC2_CMD 0x170f9
|
||||
MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x170f9
|
||||
MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x170f9
|
||||
MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x170f9
|
||||
MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x170f9
|
||||
MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x170f9
|
||||
MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x170f9
|
||||
MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x170f9
|
||||
MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x170f9
|
||||
>;
|
||||
};
|
||||
pinctrl_lcdif_dat: lcdifdatgrp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_LCD_DATA00__LCDIF_DATA00 0x79
|
||||
MX6UL_PAD_LCD_DATA01__LCDIF_DATA01 0x79
|
||||
MX6UL_PAD_LCD_DATA02__LCDIF_DATA02 0x79
|
||||
MX6UL_PAD_LCD_DATA03__LCDIF_DATA03 0x79
|
||||
MX6UL_PAD_LCD_DATA04__LCDIF_DATA04 0x79
|
||||
MX6UL_PAD_LCD_DATA05__LCDIF_DATA05 0x79
|
||||
MX6UL_PAD_LCD_DATA06__LCDIF_DATA06 0x79
|
||||
MX6UL_PAD_LCD_DATA07__LCDIF_DATA07 0x79
|
||||
MX6UL_PAD_LCD_DATA08__LCDIF_DATA08 0x79
|
||||
MX6UL_PAD_LCD_DATA09__LCDIF_DATA09 0x79
|
||||
MX6UL_PAD_LCD_DATA10__LCDIF_DATA10 0x79
|
||||
MX6UL_PAD_LCD_DATA11__LCDIF_DATA11 0x79
|
||||
MX6UL_PAD_LCD_DATA12__LCDIF_DATA12 0x79
|
||||
MX6UL_PAD_LCD_DATA13__LCDIF_DATA13 0x79
|
||||
MX6UL_PAD_LCD_DATA14__LCDIF_DATA14 0x79
|
||||
MX6UL_PAD_LCD_DATA15__LCDIF_DATA15 0x79
|
||||
MX6UL_PAD_LCD_DATA16__LCDIF_DATA16 0x79
|
||||
MX6UL_PAD_LCD_DATA17__LCDIF_DATA17 0x79
|
||||
MX6UL_PAD_LCD_DATA18__LCDIF_DATA18 0x79
|
||||
MX6UL_PAD_LCD_DATA19__LCDIF_DATA19 0x79
|
||||
MX6UL_PAD_LCD_DATA20__LCDIF_DATA20 0x79
|
||||
MX6UL_PAD_LCD_DATA21__LCDIF_DATA21 0x79
|
||||
MX6UL_PAD_LCD_DATA22__LCDIF_DATA22 0x79
|
||||
MX6UL_PAD_LCD_DATA23__LCDIF_DATA23 0x79
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_lcdif_dat_16bits: lcdifdatgrp_16bits {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_LCD_DATA00__LCDIF_DATA00 0x79
|
||||
MX6UL_PAD_LCD_DATA01__LCDIF_DATA01 0x79
|
||||
MX6UL_PAD_LCD_DATA02__LCDIF_DATA02 0x79
|
||||
MX6UL_PAD_LCD_DATA03__LCDIF_DATA03 0x79
|
||||
MX6UL_PAD_LCD_DATA04__LCDIF_DATA04 0x79
|
||||
MX6UL_PAD_LCD_DATA05__LCDIF_DATA05 0x79
|
||||
MX6UL_PAD_LCD_DATA06__LCDIF_DATA06 0x79
|
||||
MX6UL_PAD_LCD_DATA07__LCDIF_DATA07 0x79
|
||||
MX6UL_PAD_LCD_DATA08__LCDIF_DATA08 0x79
|
||||
MX6UL_PAD_LCD_DATA09__LCDIF_DATA09 0x79
|
||||
MX6UL_PAD_LCD_DATA10__LCDIF_DATA10 0x79
|
||||
MX6UL_PAD_LCD_DATA11__LCDIF_DATA11 0x79
|
||||
MX6UL_PAD_LCD_DATA12__LCDIF_DATA12 0x79
|
||||
MX6UL_PAD_LCD_DATA13__LCDIF_DATA13 0x79
|
||||
MX6UL_PAD_LCD_DATA14__LCDIF_DATA14 0x79
|
||||
MX6UL_PAD_LCD_DATA15__LCDIF_DATA15 0x79
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_lcdif_ctrl: lcdifctrlgrp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_LCD_CLK__LCDIF_CLK 0x79
|
||||
MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE 0x79
|
||||
MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC 0x79
|
||||
MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC 0x79
|
||||
>;
|
||||
};
|
||||
pinctrl_pwm1: pwm1grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_GPIO1_IO08__PWM1_OUT 0x110b0
|
||||
>;
|
||||
};
|
||||
pinctrl_lcdif_reset: lcdifresetgrp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_LCD_RESET__GPIO3_IO04 0x1b0b0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_adc1: adc1grp {
|
||||
fsl,pins = <
|
||||
MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x000010B1
|
||||
MX6UL_PAD_GPIO1_IO04__GPIO1_IO04 0x000010B1
|
||||
>;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
&iomuxc_snvs {
|
||||
pinctrl-names = "default_snvs";
|
||||
pinctrl-0 = <&pinctrl_hog_2>;
|
||||
imx6ul-evk {
|
||||
pinctrl_hog_2: hoggrp-2 {
|
||||
fsl,pins = <
|
||||
MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x1b0b0 /* enet1 reset */
|
||||
MX6ULL_PAD_SNVS_TAMPER6__GPIO5_IO06 0x1b0b0 /* enet2 reset */
|
||||
MX6ULL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x000110A0 /*key 1*/
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_tsc_reset: tscresetgrp { /*!< Function assigned for the core: Cortex-A7[ca7] */
|
||||
fsl,pins = <
|
||||
MX6ULL_PAD_SNVS_TAMPER2__GPIO5_IO02 0x000110A0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_spi4: spi4grp {
|
||||
fsl,pins = <
|
||||
MX6ULL_PAD_BOOT_MODE0__GPIO5_IO10 0x70a1
|
||||
MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11 0x70a1
|
||||
MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x70a1
|
||||
MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x80000000
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_leds: ledgrp {
|
||||
fsl,pins = <
|
||||
MX6ULL_PAD_SNVS_TAMPER3__GPIO5_IO03 0x000110A0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_485_ctl: uart3_rs485 {
|
||||
fsl,pins = <
|
||||
MX6ULL_PAD_SNVS_TAMPER0__GPIO5_IO00 0x1b0b0
|
||||
>;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
&lcdif {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_lcdif_dat
|
||||
&pinctrl_lcdif_ctrl
|
||||
&pinctrl_lcdif_reset>;
|
||||
display = <&display0>;
|
||||
status = "okay";
|
||||
reset-gpios = <&gpio3 4 GPIO_ACTIVE_LOW>; /* 100ask */
|
||||
|
||||
display0: display {
|
||||
bits-per-pixel = <24>;
|
||||
bus-width = <24>;
|
||||
|
||||
display-timings {
|
||||
native-mode = <&timing0>;
|
||||
|
||||
timing0: timing0_1024x768 {
|
||||
clock-frequency = <50000000>;
|
||||
hactive = <1024>;
|
||||
vactive = <600>;
|
||||
hfront-porch = <160>;
|
||||
hback-porch = <140>;
|
||||
hsync-len = <20>;
|
||||
vback-porch = <20>;
|
||||
vfront-porch = <12>;
|
||||
vsync-len = <3>;
|
||||
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
de-active = <1>;
|
||||
pixelclk-active = <0>;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pwm1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_pwm1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pxp {
|
||||
status = "okay";
|
||||
};
|
||||
&ecspi3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_ecspi3>;
|
||||
cs-gpios = <&gpio1 20 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
|
||||
|
||||
spidev: icm20608@0{
|
||||
compatible = "invensense,icm20608";
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <1 1>;
|
||||
spi-max-frequency = <8000000>;
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
&sai2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_sai2>;
|
||||
|
||||
assigned-clocks = <&clks IMX6UL_CLK_SAI2_SEL>,
|
||||
<&clks IMX6UL_CLK_SAI2>;
|
||||
assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
|
||||
assigned-clock-rates = <0>, <12288000>;
|
||||
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&tsc {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_tsc>;
|
||||
xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
|
||||
measure-delay-time = <0xfffff>;
|
||||
pre-charge-time = <0xffff>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart1>;
|
||||
status = "okay";
|
||||
};
|
||||
&uart3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart3
|
||||
&pinctrl_485_ctl>;
|
||||
rts-gpio = <&gpio5 0 GPIO_ACTIVE_LOW>;
|
||||
uart-has-rtscts;
|
||||
rs485-rx-during-tx;
|
||||
rs485-rts-delay = <0 0>;
|
||||
linux,rs485-enabled-at-boot-time;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart6 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart6>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
||||
&usbotg1 {
|
||||
dr_mode = "otg";
|
||||
srp-disable;
|
||||
hnp-disable;
|
||||
adp-disable;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbotg2 {
|
||||
dr_mode = "host";
|
||||
disable-over-current;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphy1 {
|
||||
tx-d-cal = <0x5>;
|
||||
};
|
||||
|
||||
&usbphy2 {
|
||||
tx-d-cal = <0x5>;
|
||||
};
|
||||
|
||||
&usdhc1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usdhc1>;
|
||||
cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
|
||||
keep-power-in-suspend;
|
||||
enable-sdio-wakeup;
|
||||
bus-width = <4>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usdhc2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usdhc2_8bit>;
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&wdog1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&adc1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_adc1>;
|
||||
num-channels = <5>;
|
||||
vref-supply = <®_can_3v3>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ecspi1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_ecspi1>;
|
||||
|
||||
fsl,spi-num-chipselects = <2>;
|
||||
cs-gpios = <&gpio4 26 GPIO_ACTIVE_LOW>, <&gpio4 24 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
/*
|
||||
spidev0: spi@0 {
|
||||
compatible = "rohm,dh2228fv";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <5000000>;
|
||||
};
|
||||
|
||||
spidev1: spi@1 {
|
||||
compatible = "rohm,dh2228fv";
|
||||
reg = <1>;
|
||||
spi-max-frequency = <5000000>;
|
||||
};
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,146 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <modbus.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define DO_BEEP1 0
|
||||
#define DO_BEEP2 1
|
||||
#define DO_LED1 2
|
||||
#define DO_LED2 3
|
||||
#define DO_LED3 4
|
||||
#define AI_TEMP 0
|
||||
#define AI_HUMI 1
|
||||
|
||||
void usage(const char *progname) {
|
||||
printf("Usage: %s <device> <command>\n", progname);
|
||||
printf("Commands:\n");
|
||||
printf(" beep1 on/off\n");
|
||||
printf(" beep2 on/off\n");
|
||||
printf(" led1 on/off\n");
|
||||
printf(" led2 on/off\n");
|
||||
printf(" led3 on/off\n");
|
||||
printf(" temp\n");
|
||||
printf(" humi\n");
|
||||
}
|
||||
|
||||
int set_digital_output(modbus_t *ctx, int addr, int value) {
|
||||
return modbus_write_bit(ctx, addr, value);
|
||||
}
|
||||
|
||||
int get_analog_input(modbus_t *ctx, int addr, float *value) {
|
||||
uint16_t reg;
|
||||
int rc = modbus_read_input_registers(ctx, addr, 1, ®);
|
||||
if (rc == -1) {
|
||||
return -1;
|
||||
}
|
||||
*value = (float)reg / 10.0; // Assuming 10x scaling for temperature and humidity
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 3) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
modbus_t *ctx;
|
||||
int rc;
|
||||
|
||||
// 创建Modbus上下文
|
||||
ctx = modbus_new_rtu(argv[1], 115200, 'N', 8, 1);
|
||||
if (ctx == NULL) {
|
||||
fprintf(stderr, "Unable to create the libmodbus context\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
modbus_set_debug(ctx, TRUE);
|
||||
|
||||
// 设置Modbus从站地址为3
|
||||
rc = modbus_set_slave(ctx, 3);
|
||||
if (rc == -1) {
|
||||
fprintf(stderr, "Failed to set slave address: %s\n", modbus_strerror(errno));
|
||||
modbus_free(ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 连接到Modbus设备
|
||||
if (modbus_connect(ctx) == -1) {
|
||||
fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
|
||||
modbus_free(ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 设置Modbus RTU模式为RS-485
|
||||
rc = modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485);
|
||||
if (rc == -1) {
|
||||
fprintf(stderr, "Failed to set RS-485 mode: %s\n", modbus_strerror(errno));
|
||||
modbus_free(ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (strcmp(argv[2], "beep1") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_BEEP1, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "beep2") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_BEEP2, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "led1") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_LED1, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "led2") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_LED2, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "led3") == 0) {
|
||||
if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
rc = set_digital_output(ctx, DO_LED3, strcmp(argv[3], "on") == 0);
|
||||
} else if (strcmp(argv[2], "temp") == 0) {
|
||||
if (argc != 3) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
float temp;
|
||||
rc = get_analog_input(ctx, AI_TEMP, &temp);
|
||||
if (rc == 0) {
|
||||
printf("Temperature: %.1f C\n", temp);
|
||||
}
|
||||
} else if (strcmp(argv[2], "humi") == 0) {
|
||||
if (argc != 3) {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
float humi;
|
||||
rc = get_analog_input(ctx, AI_HUMI, &humi);
|
||||
if (rc == 0) {
|
||||
printf("Humidity: %.1f %%\n", humi);
|
||||
}
|
||||
} else {
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rc == -1) {
|
||||
fprintf(stderr, "%s\n", modbus_strerror(errno));
|
||||
}
|
||||
|
||||
// 关闭连接并释放资源
|
||||
modbus_close(ctx);
|
||||
modbus_free(ctx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
tar xzf libmodbus-3.1.10.tar.gz
|
||||
cd libmodbus-3.1.10/
|
||||
./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/tmp
|
||||
make
|
||||
make install
|
||||
cd tmp/
|
||||
ls
|
||||
|
||||
arm-buildroot-linux-gnueabihf-gcc -I libmodbus-3.1.10/tmp/include/modbus -Llibmodbus-3.1.10/tmp/lib -lmodbus -o sensor_test sensor_test.c
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,31 @@
|
||||
1.编译jimtcl
|
||||
unzip jimtcl-master.zip
|
||||
cd jimtcl-master/
|
||||
ls
|
||||
./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/tmp
|
||||
make
|
||||
make install
|
||||
ls tmp/
|
||||
|
||||
2.编译libusb
|
||||
unzip libusb-1.0.28.zip
|
||||
cd libusb-1.0.28/
|
||||
./bootstrap.sh
|
||||
./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/tmp
|
||||
make
|
||||
make install
|
||||
|
||||
|
||||
3.编译openocd
|
||||
命令如下:
|
||||
unzip openocd-master.zip
|
||||
cd unzip openocd-master
|
||||
./bootstrap
|
||||
|
||||
JIMTCL_CFLAGS="-I /home/book/create_fs/src/openocd_app/jimtcl-master/tmp/include" JIMTCL_LIBS="-L/home/book/create_fs/src/openocd_app/jimtcl-master/tmp/lib /home/book/create_fs/src/openocd_app/jimtcl-master/tmp/lib/libjim.a" LIBUSB1_CFLAGS="-I /home/book/create_fs/src/openocd_app/libusb-1.0.28/tmp/include/libusb-1.0/" LIBUSB1_LIBS="-L/home/book/create_fs/src/openocd_app/libusb-1.0.28/tmp/lib -lusb-1.0" ./configure --host=arm-buildroot-linux-gnueabihf --enable-stlink --prefix=$PWD/tmp
|
||||
|
||||
make // 会在最后链接时出错, 手工执行下面的链接命令
|
||||
|
||||
arm-buildroot-linux-gnueabihf-gcc -Wall -Wstrict-prototypes -Wformat-security -Wshadow -Wextra -Wno-unused-parameter -Wbad-function-cast -Wcast-align -Wredundant-decls -Wpointer-arith -Wundef -Werror -g -O2 -o src/openocd src/main.o src/.libs/libopenocd.a -L/home/book/create_fs/src/openocd_app/libusb-1.0.28/tmp/lib /home/book/create_fs/src/openocd_app/libusb-1.0.28/tmp/lib/libusb-1.0.so -lpthread -lm -L/home/book/create_fs/src/openocd_app/jimtcl-master/tmp/lib /home/book/create_fs/src/openocd_app/jimtcl-master/tmp/lib/libjim.a -lutil -ldl -pthread -Wl,-rpath -Wl,/home/book/create_fs/src/openocd_app/libusb-1.0.28/tmp/lib -lssl -lz -lcrypto
|
||||
|
||||
make install
|
||||
Binary file not shown.
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
cd /etc/openocd/scripts
|
||||
openocd -f interface/stlink.cfg -f target/stm32f0x.cfg -c init -c halt -c "flash write_image erase /root/demo.bin 0x08000000" -c reset -c shutdown
|
||||
@@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
|
||||
# 判断参数数量
|
||||
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
|
||||
echo "Usage: /bin/sensor_test.sh [led1|led2|led3|beep1|beep2|humi|temp] [on|off]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
device="/dev/ttymxc2"
|
||||
|
||||
# 判断第一个参数
|
||||
case $1 in
|
||||
led1|led2|led3|beep1|beep2)
|
||||
# 判断是否为 led 或 beep 命令
|
||||
if [ $# -eq 2 ] && [[ "$2" == "on" || "$2" == "off" ]]; then
|
||||
# 调用传感器测试程序
|
||||
/bin/sensor_test "$device" "$1" "$2"
|
||||
else
|
||||
echo "Error: Invalid command for $1. Use 'on' or 'off'."
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
humi|temp)
|
||||
# 判断是否为 humi 或 temp 命令
|
||||
if [ $# -eq 1 ]; then
|
||||
# 调用传感器测试程序
|
||||
result=$(/bin/sensor_test "$device" "$1")
|
||||
|
||||
# 使用 grep 和 sed 提取数值
|
||||
if [ "$1" == "temp" ]; then
|
||||
value=$(echo "$result" | grep -oP "Temperature: \K[0-9]+\.[0-9]+")
|
||||
elif [ "$1" == "humi" ]; then
|
||||
value=$(echo "$result" | grep -oP "Humidity: \K[0-9]+\.[0-9]+")
|
||||
fi
|
||||
# 输出结果
|
||||
echo "$value"
|
||||
|
||||
else
|
||||
echo "Error: Invalid command for $1. No additional arguments needed."
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Error: Invalid device. Use led1, led2, beep1, beep2, humi, or temp."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
BIN
QT工业物联网开发实战:OpenOCD烧录与Modbus通信.pdf
Normal file
BIN
QT工业物联网开发实战:OpenOCD烧录与Modbus通信.pdf
Normal file
Binary file not shown.
@@ -33,6 +33,7 @@ reboot
|
||||
# 6. 运行程序, 在开发板执行如下命令:
|
||||
# 在单板上执行测试程序:
|
||||
export TSLIB_PLUGINDIR=/lib/ts
|
||||
export TSLIB_CONSOLEDEVICE=none
|
||||
ts_test_mt
|
||||
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ reboot
|
||||
# 6. 运行程序, 在开发板执行如下命令:
|
||||
# 在单板上执行测试程序:
|
||||
export TSLIB_PLUGINDIR=/lib/ts
|
||||
export TSLIB_CONSOLEDEVICE=none
|
||||
ts_test_mt
|
||||
|
||||
|
||||
|
||||
@@ -30,3 +30,4 @@ udhcpc -i wlan0
|
||||
ping news.qq.com
|
||||
|
||||
# 成功后,以后再次启动系统后,只需要执行第5、第7条命令即可连接WIFI
|
||||
|
||||
|
||||
Reference in New Issue
Block a user