SPI理论基础
SPI 协议简介SPI(Serial Peripheral Interface)协议是一种主从式的通信协议,主设备可以同时控制多个从设备,但每个从设备只能被一个主设备控制。SPI 协议的主要特点是通信速度快,但通信线路较多,常用于短距离的板内通信。 SPI 通信必须由主机发起通信(无论是发送还是接收),从机被动接受。从机不能主动发送数据。 SPI 接口形式SPI 接口有如下几个引脚: SCLK(Serial Clock):时钟信号 MOSI(Master Output / Slave Input):主设备输出、从设备输入 MISO(Master Input / Slave Output):主设备输入、从设备输出 CS(Chip Select):片选信号,用于选择从设备 此处只讨论标准 SPI,不讨论 Dual SPI、Qual SPI 等扩展协议。 SPI 时序片选信号SPI 传输过程中,输出 CS 为低电平,选择从设备。从设备只有在 CS 为低电平时,才会响应主设备的时钟信号。 在多个从设备的情况下,可以使用多个 CS 引脚,每个 CS 引脚对应...
IIC理论基础
概要IIC 是两线串行通信协议(serial data line (SDA) serial clock line (SCL)),支持多设备于同一总线通信,每个设备拥有唯一地址来标识。 速度模式 标准模式:最慢的模式 快速模式:要求总线容值和设备兼容性能匹配 快速+模式:同上 下面两个稍微有些特殊: 高速模式:两者需协商后才能启用该模式 超快模式:该模式只能进行写操作,并且一些IIC功能也不可用 物理层两线连接 开漏连接SDA和SCL都要开漏连接,两者各自连接到一个NMOS,以便可以在需要的时候接地来拉低总线。开漏连接就是IIC能连接多个设备的原因。 协议开始和停止 开始:将 SDA 和 SCL 都拉低(先拉 SDA) 结束:将 SDA 和 SCL 都释放为高电平(先放 SCL) 逻辑1和0 SDA 释放高时为逻辑 1,下拉时为逻辑 0 SCL 上升沿和下降沿采样时 SDA 的状态必须相同,否则无效(因为会被识别为开始或结束信号) 通信帧一个帧9个bit,为了开始通信,需要发送开始信号后接设备地址(7bit or 10bit,10bit则要发两个bytes) 若...
WSL下编译rv110x系列芯片固件
介绍系统使用 Windows 11 WSL2 Ubuntu 24.04 遇到的问题一、没有 python 这个命令是因为安装了 python3 但没有 python 没有指向它 sudo apt install python-is-python3 安装该包来解决这个问题 二、PATH 包含空格WSL 把 windows 的 PATH 也一起弄到 Linux 内了 修改 WSL 配置文件 /etc/wsl.conf 添加 12[interop]appendWindowsPath=false 关闭 wsl 八秒以上再启动即可解决 三、找不到 cpio 模块安装一下 sudo apt install cpio
Nanopi neo core 作为下位机首次配置流程
原本的配置流程链接 准备工作硬件准备 NanoPi NEO Core 板子 4G 及以上的 TF 卡和读卡器 USB 转串口 水下机器人主板(提供网口和供电) 软件准备 安装 SSH 软件(较新的 Windows 系统一般自带,也可以去下载专门的 SSH 软件,如:putty 、finalshell、MobXterm等等) 串口终端(如 putty 、MobXterm 等等) 前往 官方 WiKi 下载系统镜像,注意要下载 带 eflasher 的 Ubuntu xenial 4.14 ,即文件名类似于 h3_ eflasher friendlycore-xenial_ 4.14_ armhf 20210618.img.zip 的镜像文件 开始烧录固件(全新的 Nano Pi 会内置该固件,可以直接跳到系统配置) 向 SD 卡写入镜像使用镜像写入工具(如 win32diskimager),选择指定镜像烧录(烧录前请确保 SD 卡只有一个分区) 使用串口连接 Nano Pi请将 USB 转串口连接到 Nano Pi 的 RX0 和 TX0 引脚,并且共地,引脚图如下: 电脑...
RockPi 5B Armbian 首次开机设置流程
镜像烧录下载 Armbian 最新镜像 Armbian_x.x.x_Rock-5b_jammy_legacy_x.x.x_gnome_desktop.img.xz 烧录到SD内(推荐使用 Raspberry Pi Imager) 安装后相关设置 首先启动3D加速 12345sudo add-apt-repository ppa:liujianfeng1994/panfork-mesasudo add-apt-repository ppa:liujianfeng1994/rockchip-multimediasudo apt updatesudo apt dist-upgradesudo apt install kodi 如果要使用Docker 12update-alternatives --set iptables /usr/sbin/iptables-legacyupdate-alternatives --set ip6tables /usr/sbin/ip6tables-legacy 安装中文字体(后把shell改为中文才不会乱码) 12sudo apt-get inst...
ESP32-IDF WIFI的使用(1) 初步入门
WiFi相关文档参阅 乐鑫IDF编程文档 具体启动流程如下: 12345678910111213141516171819ESP_ERROR_CHECK(esp_netif_init()); //创建一个 LwIP 核心任务,并初始化 LwIP 相关工作 ESP_ERROR_CHECK(esp_event_loop_create_default()); //创建一个系统事件任务,并初始化应用程序事件的回调函数。在此情况下,该回调函数唯一的动作就是将事件中继到应用程序任务中 ESP_ERROR_CHECK(esp_netif_create_default_wifi_sta()); //创建有 TCP/IP 堆栈的默认网络接口实例绑定 station wifi_init_config_t wifi_init_config = WIFI_INIT_CONFIG_DEFAULT; ESP_ERROR_CHECK(esp_wifi_init(&wifi_init_config)); ESP_ERROR_CHECK(esp_wifi_set_m...
ESP32-IDF 自定义分区表的编写
内容1234# Name, Type, SubType, Offset, Size, Flagsnvs, data, nvs, , 0x6000,phy_init, data, phy, , 0x1000,factory, app, factory, , 1M, 第一个为NVS分区,大小为24K多一点;第三个就是存放程序的地方,大小为1MByte 我们在底下多加一行NVS 1my_nvs, data, nvs, , 1M, 将这些内容保存为 partitions.csv 后放在项目根目录并修改 Manuconfig 里面使用的分区表. 使用这里以NVS为例: 1234nvs_handle_t testhandle;nvs_open_from_partition("my_nvs", "test_name", NVS_READWRITE, &testhandle);...
ESP32-IDF 非易失性存储 NVS (二) 相关工具
NVS迭代器相当于终端的 ls 命令,可以遍历 NVS 所有的 key 和 value 12345678910// Example of listing all the key-value pairs of any type under specified partition and namespace nvs_iterator_t it = NULL; esp_err_t res = nvs_entry_find(<nvs_partition_name>, <namespace>, NVS_TYPE_ANY, &it); while(res == ESP_OK) { nvs_entry_info_t info; nvs_entry_info(it, &info); // Can omit error check if parameters are guaranteed to be non-NULL printf("key '%s', type '%d' \...
ESP32-IDF 非易失性存储 NVS (一) 入门
介绍NVS格式就是一种flash的文件管理方式,因为他自身这种键值对的数据结构有较大的空间开销,所有不适合很长的数据(重复的key会浪费空间),而适合一对一对的这种短的数据(优势应该是方便查管理).在ESP32上NVS是基础,比如WIFI都会使用到NVS来存储配置文件。乐鑫官方文档 API 函数名 描述 nvs_flash_init() 挂载NVS nvs_flash_deinit() 卸载NVS nvs_open(const char* namespace_name, nvs_open_mode_t open_mode, nvs_handle_t *out_handle) 打开对应namespace的NVS nvs_close(nvs_handle_t *out_handle) 关闭NVS nvs_get_xx(nvs_handle_t c_handle, const char* key, xx* out_value) 获取数据(如果对应key数据不存在则out_value不会被修改) nvs_set_xx(nvs_handle_t handle,...
ESP32-IDF 自定义菜单 Menuconfig 入门
介绍 程序写好后,肯定会有很多变量需要设置,为了方便他人和未来的自己,我们可以把这些变量做到 Menuconfig 中。这样子,其他人或者未来的自己,就不需要打开代码,直接使用 Menuconfig 配置后,编译再上传即可。 乐鑫文档; https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/kconfig.html Kconfig 标准; https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html 实例例如下面这段点灯代码: 12345678910111213141516#define LEDPIN 2#define DELAY_MS_TIME 2000...void app_main(void){ int pin_status = 0; gpio_reset_pin(LEDPIN); gpio_set_direction(LEDPIN, GPIO_MODE_OUTPUT); ...