I2C总线
重复条件:在一次通信过程中,当主机需要和不同的从机传输数据或者需要切换读写操作,主机可再发送一个开始条件。
例如:主机需要读取从机某个寄存器的数据
1.主机发送起始信号。
2.主机发送从机地址,写标志。
3.从机应答后,主机再发送一次起始信号,发送寄存器地址,读标志。
4.主机释放总线,接收从机发来的数据。
5.主机收到数据ACK,不想再收从机的数据了就发NACK。
6.主机发送停止位,结束本次通信。

主机向从机的某个寄存器写数据:
1.主机发送起始信号。
2.主机发送从机地址,写标志。
3.从机应答后,主机接着发送寄存地址。
4.从机应答后,主机接着发送要写入的数据。
5.从机应答后,主机发送停止位结束本次通信。

本章小结:
1.i2c设备接口使用的从机地址均不包含读写的地址。
虚拟文件系统
- DFS虚拟文件系统组件
全称:Device File System,即设备虚拟文件系统。
- DFS架构
1.提供POSIX标准接口:read、write、poll/select
2.支持多种文件系统,例如:FatFS、RomFS、DevFS,提供普通文件、设备文件、网络文件描述符管理。
3.支持多种类型的储存设备,如:SDCard、SPI Flash、Nand Flash等。
4.主要分为:POSIX接口层dfs_posix.c 、DFS虚拟文件系统层dfs_file.c 、设备抽象层。

- POSIX接口层
可移植性操作系统接口,规定的一组api函数接口。
- 虚拟文件系统层
用户将具体的文件系统注册到DFS框架中,如:FatFS、RomFS、DevFS 这些文件系统。
1.FatFS:兼容微软FAT格式文件的开源文件系统,专为小型嵌入式设备开发,采用 ANSI C 编写,具有良好的硬件无关性以及可移植性,是 RT-Thread 中最常用的文件系统类型。
2.传统型的 RomFS 文件系统是一种简单的、紧凑的、只读的文件系统。
3.Jffs2 文件系统是一种日志闪存文件系统。主要用于 NOR 型闪存,基于 MTD 驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃 / 掉电安全保护,提供写平衡支持等。
4.DevFS 即设备文件系统,在 RT-Thread 操作系统中开启该功能后,可以将系统中的设备在 /dev 文件夹下虚拟成文件,使得设备可以按照文件的操作方式使用 read、write 等接口进行操作。
5.UFFS 是 Ultra-low-cost Flash File System(超低功耗的闪存文件系统)的简称。它是国人开发的、专为嵌入式设备等小内存环境中使用 Nand Flash 的开源文件系统。与嵌入式中常使用的 Yaffs 文件系统相比具有资源占用少、启动速度快、免费等优势。
设备抽象层
设备抽象层将物理设备如 SD Card、SPI Flash、Nand Flash,抽象成符合文件系统能够访问的设备,例如 FAT 文件系统要求存储设备必须是块设备类型。
- 注册文件系统

- 将储存设备注册为块设备

- 格式化文件系统
1 | int dfs_mkfs(const char * fs_name, const char * device_name); |

- 挂在文件系统
1 | int dfs_mount(const char *device_name, |
其他在C语言代码中的操作直接调用文件系统提供的POSIX接口就行。shell中也可使用文件操作的命令,创建删除文件和目录文件、切换目录等命令。
- 开机初始化块设备和DFS文件系统完后,在main中挂载文件系统到根目录:
1 |
|

rtconfig.h中的宏添加:
1 | /* DFS虚拟文件系统所需宏 */ |
RT-Thread网络框架
AT命令、SAL层(套接字抽象层)、BSD Socket API(标志网络套接字API)、LwIP

- 本文作者: 龙兄嵌入式
- 本文链接: https://hexo.880755.xyz/1970/01/01/zblog/download/81.I2C总线、虚拟文件系统、网络组件/