QuecPython 文件系统操作

本文档旨在介绍QuecPython文件系统类型、使用方式和常见问题,指导客户使用QuecPython文件系统功能。

概述

文件系统是指文件和对文件进行操作和管理的软件的集合。文件系统实现了存储空间管理、构造文件结构、提供访问文件的操作接口。使用文件系统存储方式可以方便进行文件的增、删、查、改。

文件系统类型

目前各个平台使用的文件系统类型有EFS、SPIFFS、littleFS、FATFS。

文件系统名称特点适用场景适用型号开源网址
EFS支持各种NOR和NAND技术嵌入式系统NOR flash、NAND flash、SD卡、EMMC存储BG95系列模组底层高通特有,非开源
SPIFFS低资源消耗、擦写均衡、掉电保护嵌入式系统SPI NOR flash存储ECx00U&EGx00U&ECx00G系列模组底层https://github.com/pellepl/spiffs
littleFS低资源消耗、擦写均衡、掉电保护嵌入式系统SPI NOR flash存储各型号QuecPython应用层https://github.com/littlefs-project/littlefs
FATFS兼容Windows FAT32格式嵌入式系统SD卡和EMMC存储各型号SD卡和EMMC存储场景http://elm-chan.org/fsw/ff/00index_e.html

VFS

虚拟文件系统。在上述实体文件系统基础之上抽象的文件系统,提供统一的接口访问不同的实体文件系统。VFS API兼容POSIX标准API。具体操作步骤如下。

初始化实体文件系统

该步主要进行存储介质硬件初始化,然后挂载实体文件系统,最后获取到实体文件系统的句柄和文件操作接口。每个实体文件系统有各自独立的硬件初始化和挂载接口。如果初始化成功,这些接口最终返回实体文件系统的对象,对象中包含有实体文件系统句柄和文件操作接口等信息。

挂载虚拟文件系统

该步将实体文件系统接口绑定到虚拟文件系统接口。具体接口为uos.mount(vfs_obj, path)。其中参数vfs_obj为上一步初始化实体文件系统返回的对象,参数path为虚拟文件系统的根目录,虚拟文件系统正是以根目录来区分不同的实体文件系统,即每一个实体文件系统绑定一个不同的根目录。根据应用场景,文件系统根目录可以分为:内置NOR flash用户区usr、内置NOR flash备份区bak、外置NOR flash区ext、SD卡区sd、EMMC区emmc。这样不同的存储区域可以使用同一套软件接口传入不同的根目录进行访问。接口用法参考挂载文件系统。

卸载虚拟文件系统

将实体文件系统接口和虚拟文件系统接口解绑,具体接口为uos.umount(path),其中path同uos.mount()接口传入的path一致。

应用

基础文件操作

POSIX API

当进行基础的文件操作时可直接使用POSIX的接口进行开发。

打开文件
open(file, mode="r")

  • file: 文件路径(在QuecPython里,用户文件路径在/usr下,所以用户创建读取文件都要在此目录下进行)

  • mode: 打开模式,可选,默认为只读

模式描述
w以只写方式打开文件。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
r以只读方式打开文件。文件的指针将会放在文件的开头。
w+以读写方式打开文件。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
r+以读写方式打开文件。该文件必须存在。文件的指针将会放在文件的开头。
wb以只写方式打开二进制文件。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
rb以只读方式打开二进制文件。文件的指针将会放在文件的开头。
wb+以读写方式打开二进制文件。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
rb+以读写方式打开二进制文件。该文件必须存在。文件的指针将会放在文件的开头。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行读写。
ab打开一个二进制文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab+打开一个二进制文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行读写。
写入文件
write(str)

  • str: 要写入的数据

该接口返回成功写入的字符串长度

读取文件
read(size)

  • size:要读取的长度,单位字节

该接口返回成功读到的数据

读取文件的一行

readline(size)

  • size:要读取的长度,单位字节

调用此接口会根据结束符自动读取,并返回一个等于size长度的字符串,如果size为-1则返回整行。

读取文件所有行

readlines()

调用此接口会根据结束符自动分行读取,并返回一个包含所有分行的列表。

移动文件指针
seek(offset, whence)

  • offset: 开始的偏移量,也就是代表需要移动偏移的字节数
  • whence: 可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
关闭文件
close()

调用后关闭文件,不再继续操作该文件。

综合示例
# 创建一个test.txt文件,注意路径在/usr下
f = open("/usr/test.txt", "w+")
i = f.write("hello world\n")
i = i + f.write("hello quecpython\n")
print("write length{}".format(i))
f.seek(0)
str = f.read(10)
print("read content:{}".format(str))
f.seek(0)
str = f.readline()
print("read line content:{}".format(str))
f.seek(0)
str = f.readlines()
print("read all lines content:{}".format(str))
f.close()
print("test end")

运行结果
import example
>>> example.exec('/usr/example_fs_basic_operation_posix.py')

write length29
read content:hello worl
read line content:hello world

read all lines content:['hello world\n', 'hello quecpython\n']

test end
>>>

点此在github中下载完整代码。

uos API

当进行目录等操作的时候,需要调用uos库进行操作,接口用法参考uos - 基本系统服务。

综合示例
import uos

def main():
    # 创建文件 此处并没有对文件进行写入操作
    f = open("/usr/uos_test","w")
    f.close()
    del f

    # 查看文件是否存在
    t = uos.listdir("/usr")
    print("usr files:{}".format(t))

    if "uos_test" not in t:
        print("file not exist test fail")
        return

    # 查看文件状态
    a = uos.stat("/usr/uos_test")
    print("file size:{}bytes".format(a[6]))

    # 重命名文件
    uos.rename("/usr/uos_test", "/usr/uos_test_new")
    t = uos.listdir("/usr")
    print("test file renamed, usr files:{}".format(t))

    if "uos_test_new" not in t:
        print("renamed file not exist test fail")
        return

    # 删除文件
    uos.remove("/usr/uos_test_new")
    t = uos.listdir("/usr")
    print("remove test file, usr files:{}".format(t))

    if "uos_test_new" in t:
        print("remove file fail, test fail")
        return

    # 目录操作
    t = uos.getcwd()
    print("current path:{}".format(t))
    uos.chdir("/usr")
    t = uos.getcwd()
    print("current path:{}".format(t))
    if "/usr" != t:
        print("dir change fail")
        return

    uos.mkdir("testdir")
    t = uos.listdir("/usr")
    print("make dir, usr files:{}".format(t))

    if "testdir" not in t:
        print("make dir fail")
        return

    uos.rmdir("testdir")
    t = uos.listdir("/usr")
    print("remove test dir, usr files:{}".format(t))

    if "testdir" in t:
        print("remove dir fail")
        return

if __name__ == "__main__":
    main()

运行结果

>>> example.exec('/usr/example_fs_basic_operation_uos.py')

usr files:['system_config.json', 'example_fs_basic_operation_uos.py', 'uos_test']
file size:0bytes

test file renamed, usr files:['system_config.json', 'example_fs_basic_operation_uos.py', 'uos_test_new']

remove test file, usr files:['system_config.json', 'example_fs_basic_operation_uos.py']
current path:/
current path:/usr

make dir, usr files:['system_config.json', 'example_fs_basic_operation_uos.py', 'testdir']

remove test dir, usr files:['system_config.json', 'example_fs_basic_operation_uos.py']
>>>

点此在github中下载完整代码。

高级文件操作

ql_fs - 高级文件操作,接口用法参考ql_fs - 高级文件操作。

综合示例
import ql_fs

def main():
    # 递归式创建文件夹, 传入文件夹路径
    ql_fs.mkdirs("usr/a/b")

    # 查看文件或文件夹是否存在
    ret = ql_fs.path_exists("/usr/a/b")
    if ret:
        print("make dir success")
    else:
        print("make dir fail")
        return

    # 创建文件或者更新文件数据
    data = {"test":1}
    ql_fs.touch("/usr/a/b/config.json", data)

    # 查看文件或文件夹是否存在
    ret = ql_fs.path_exists("/usr/a/b/config.json")
    if ret:
        print("create file success")
    else:
        print("create file fail")
        return

    # 读取json文件
    data = ql_fs.read_json("/usr/a/b/config.json")
    print("config json read content:{}".format(data))
    data = ql_fs.read_json("/usr/system_config.json")
    len = ql_fs.path_getsize('usr/system_config.json')
    print("system_config json length:{}".format(len))
    print("system_config json read content:{}".format(data))

    # 文件拷贝
    ql_fs.file_copy("/usr/a/b/config.json", "usr/system_config.json")
    data = ql_fs.read_json("/usr/a/b/config.json")
    print("copy json read content:{}".format(data))

    # 获取文件所在文件夹路径
    ret = ql_fs.path_dirname("/usr/a/b/config.json")
    print("path of the file:{}".format(ret))

    # 删除文件夹和其下的文件
    ql_fs.rmdirs("usr/a")

    # 查看文件或文件夹是否存在
    ret = ql_fs.path_exists("/usr/a/b/config.json")
    if ret:
        print("remove file fail, test fail")

    ret = ql_fs.path_exists("/usr/a/b")
    if ret:
        print("remove dir2 fail, test fail")

    ret = ql_fs.path_exists("/usr/a")
    if ret:
        print("remove dir1 fail, test fail")

if __name__ == "__main__":
    main()

运行结果

>>>
example.exec('/usr/example_fs_advanced_operation.py')
make dir success

create file success
config json read content:{'test': 1}
system_config json length:15
system_config json read content:{'replFlag': 0}

copy json read content:{'replFlag': 0}
path of the file:/usr/a/b

>>>

点此在github中下载完整代码。

备份还原

概述 - 备份还原

QuecPython设备软件由固件和用户应用脚本2部分组成。其中固件存放在系统程序分区包括kernel和QuecPython VM,而用户应用脚本存放在设备文件系统分区。为了确保系统稳定性,设计了文件系统备份还原机制。当前设备划分了2个文件系统分区,分别是:用户文件系统usr和备份文件系统bak。用户文件系统存放用户正常运行需要的py脚本和数据文件,可读写。备份文件系统用来备份用户文件系统中的出厂原始文件,只读。如果开启了备份还原功能,当用户文件系统中的文件被误删除或意外被修改时,会自动从备份文件系统还原原始的文件到用户文件系统。NOR flash空间分布如下图:

实现原理

备份

对用户文件系统的文件进行备份,具体流程是:

1.将用户文件系统下的源文件拷贝一份到备份文件系统。

2.在用户文件系统和备份文件系统各生成一个checksum.json文件。该文件存放的内容是每一个源文件的文件名和其对应的checksum值,checksum值是根据每一个源文件的内容通过CRC32算法计算出来的,所以每一个源文件都有唯一对应的一个checksum值。

3.在备份文件系统生成一个备份还原标志文件backup_restore.json,记录是否开启备份还原功能。

还原

当用户文件系统的文件发生损坏时,从备份文件系统中拷贝对应的文件到用户文件系统。具体流程是:
1.开机检测到备份文件系统中备份还原的标志使能,且用户文件系统下的checksum.json文件存在,这时如果用户文件系统下的某个源文件被删除,则会将备份文件系统中对应源文件拷贝到用户文件系统下,并更新该文件对应的checksum值到用户文件系统下的checksum.json文件中。

2.开机检测到备份文件系统中备份还原的标志使能,且用户文件系统下的checksum.json文件存在,这时如果用户文件系统下的某个源文件被破坏,则会将备份文件系统中对应源文件拷贝到用户文件系统下,并更新该文件对应的checksum值到用户文件系统下的checksum.json文件中。

3.开机检测到备份文件系统中备份还原的标志使能,这时如果用户文件系统下的checksum.json文件不存在,则会将备份文件系统中checksum.json文件拷贝一份到用户文件系统,然后再走上述1、2步的检测流程。

OTA更新

当用户文件系统的文件需要OTA升级时,在升级成功后,会将升级后的用户文件的checksum值更新到用户文件系统下的checksum.json文件中。

注意:不会更新备份文件系统下的checksum文件和源文件。

工具操作

1.选择项目。

2.选择待合并的固件。

3.右键选择usr弹出对话框。

4.点击添加文件选项,添加待合并备份的文件。

5.已添加的待合并的文件。

6.勾选备份按钮。

7.点击合并按钮进行合并固件。合并成功即可生成带备份还原功能的量产固件。

1.右键选择usr弹出对话框。

2.点击添加文件选项,添加待合并备份的文件。

1.已添加的待合并的文件。

2.勾选备份按钮。

3.点击合并按钮进行合并固件。合并成功即可生成带备份还原功能的固件。

注意事项

掉电保护

为了防止文件操作过程中突然掉电导致的已有数据丢失或文件系统损坏,部分文件系统被设计可以处理随机电源故障。即所有文件操作都有写时复制保证,如果断电,文件系统将恢复到上次已知的完好状态。前述的SPIFFS和littleFS都支持该特性。

擦写均衡

由于NOR flash存储的擦写寿命是有限的,为了避免对存储空间某一块频繁擦写导致该块无法使用进而影响到整个flash存储的正常使用的问题,需要设计一套算法将用户的擦写操作平均分散到整个NOR flash存储空间上。而部分文件系统在设计时已经考虑了该特性,如前述的SPIFFS和littleFS文件系统。

读写速率

1.读写速率主要取决于硬件通信接口,SPI 6线模式要快于SPI 4线模式,SDIO 4线模式要快于SPI模式。提高速率的方法,减少open、close的频率,文件open一次直到write完所有内容后再close。

2.对于SD卡应用场景,当存储的文件个数超过一定数量如1000个,这时对文件执行open、write、close操作会比较耗时。这时可以减少文件个数,或者增加子目录,在每个子目录中事先创建好每个空文件,以规避这个问题。

3.针对部分应用场景实时性要求比较高的情况,如果可以,使用裸flash接口访问。如GUI字库文件。同时,也可以采用缓存机制提高访问速度,将经常访问的数据缓存到RAM中,下次访问时直接从RAM中读取,如GUI显示用到的图片文件。

空间利用效率

由于NOR flash存储空间有限,这里主要考虑NOR flash littleFS文件系统空间使用情况。

小文件存储机制:

当文件大小小于等于一个块(如4KB)时,其消耗恒定为一个块。即使是远小于一个块的文件(如1byte),也要消耗一整个块的空间。这是因为littlefs1.0文件系统缺乏复用多余块空间的机制。而littlefs2.0中引入内联文件机制,则会将小文件存放到所在文件夹所占空间中以减少空间的占用。

大文件存储机制:

当文件大小达到一个块以上时,需要引入ctz逆序链表的机制。相比于传统文件系统的链表,这种链表为逆序,追加数据时不需要额外的开销来重新建立所有的索引。且引入了ctz指针机制,即block N如果是一个能被2^X整除的数,那么他就存在指向N – 2^X的指针。大文件的指针信息和文件本身的内容存储在同一空间,计算文件实际大小时,需要考虑指针占用的空间。所以,大文件的实际使用空间为其本身占用的空间,加上CTZ指针消耗的空间。

文件夹存储机制:

在littlefs文件系统中,新建一个文件夹需要创建一组新的metadata pair来维护此文件夹下的内容,因此会造成两个block的开销。综上,为了高效使用存储空间,避免大量小文件的存储,及避免使用文件夹。

常见问题

挂载失败

1.如果抛异常”OSError: [Errno1] EPERM“,是因为重复调用uos.mount()。

2.如果外置spi NOR flash挂载抛异常”OSError: [Errno 19] ENODEV“,一般是硬件连接异常,如spi port不对应,硬件连接不可靠。

创建文件失败、写文件失败

1.一种情况是,部分型号如果文件没有close重复open则会返回失败。需要确保open、close成对操作。

2.空间还剩余挺多,写文件抛异常error 28报空间不足。如果有f.seek()操作,由于文件系统掉电保护机制,需要保证剩余空间大于seek的目标文件位置到文件末尾的长度。

with open 和 open的区别

open是python的一个内置接口。with open是使用了with语句的open接口。open()完成后必须调用close()接口关闭文件。因为文件对象会占用系统的资源,同一时间能打开的文件数量也是有限的,另外不成对使用可能会导致其他异常。由于文件读写时有可能产生IO异常,一旦出错,后面的close()就不会调用。with open则可以避免这样的情况,即便在文件读写过程中发生IO异常,也会自动调用close()接口关闭文件。

with open('/usr/test.txt','w+')as f:
    f.write('1234567890')

相关推荐

移远通信携手高通,依托AI Hub共建端侧AI开发者生态

移远通信与高通公司今日共同宣布,将在终端侧AI领域进一步深化合作。®,加速生成式和智能体AI应用在物联网、下一代PC、智能汽车、XR设备等资源受限的终端侧的部署与普及。移远通信首席运营官张栋表示:“高通公司在端侧AI创新与生态建设上长期引领,AI Hub中国版更把优质模型与本地化服务带到开发者面前。我们很高兴与高通携手,用丰富的端侧AI硬件和工具链,把这些能力转化为可量产、可复制的场景方案。

281

具身智能走进工厂:移远宝维塔工博会两大发布,柔性智造与车载电子测试同步提速

10月12日,2026中国国际工业博览会在国家会展中心(上海)开幕。聚焦先进制造与工业自动化,移远通信旗下工业智能品牌于展会现场正式发布,并推出,围绕柔性制造与车载电子测试自动化,分享技术探索、量产实践与行业洞察。

194

移远产品体验官 | 第一期 • 入选结果揭晓

219

移远产品体验官正在招募|免费开发板等你来体验!

16

LVGL-流程

在当今嵌入式系统开发领域,图形化用户界面(GUI)的需求越发突显,Quecpython + LVGL将为您的GUI开发助力。

65

IOTE 2026 | 百搭主控板登场!移远QSM603FCP,打造AIoT终端的高效底座

8月26日,IOTE深圳物联网展拉开帷幕。作为聚焦AIoT、边缘智算与机器人创新应用的产业风向标,本届展会汇聚大量前沿技术成果。在此期间,作为填补中端市场高性能智控需求的关键一环,QSM603FCP凭借,为智慧零售、工业AI质检、边缘智算网关及具身智能机器人等领域提供了“即插即用”的硬核底座。作为主控板的“大脑”,QSM603FCP基于。

452

守护每一程翻山越岭,移远通信为闽西公路织就“数字防护网”

在福建龙岩,G319等国道蜿蜒穿行于闽西的崇山峻岭之间。沿线高边坡、深落差、急弯道此起彼伏,每逢汛期,强降雨频发,极易诱发山体滑坡、塌方等地质灾害,不仅严重威胁车辆和行人通行安全,也为公路养护带来了极大挑战。为补齐山区公路安全管控短板,推动交通基础设施数字化转型升级,龙岩市启动“普通公路示范通道智慧化改造项目”。山区边坡防护最大的难题,就是风险藏在暗处,很难提前预判。山体形变细微无声,传统巡检方式只能事后补救,很难提前捕捉萌芽风险。为此,

170

移远通信×星云环影,解锁儿童“AI智伴”新体验

AI科学分析总结儿童的兴趣及爱好,并提供成长建议与情绪分析。该方案使搭载同一机芯盒的不同毛绒玩具,能够拥有独特的性格与交互逻辑,实现了。

200

移远通信:以软硬一体的AIoT方案,玩转AI智能陪伴新风口

在7月23日举办的AIZQE 2026全球AI硬件与AIoT终端创新千人峰会・深圳站上,移远通信产品总监王鹏系统介绍了公司面向AI智能陪伴领域的一站式行业解决方案,全面拆解移远AIoT软硬一体化能力,并分享了在该赛道深耕多年、落地多元智能终端的实践经验。以“情感陪伴+科学教育”为核心,具备AI学伴团、万物识别、拍照学习等核心功能,支持户外、居家多场景,帮助用户随时随地探索知识,实现寓教于乐的伴随式学习。面向都市年轻上班族及独居人群,可实时捕捉用户情绪变化,输出即时、暖心的互动反馈。移远通信产品总监王鹏。

215

筑牢“安全底线”:移远通信车规IMU模组斩获ISO 26262 ASIL-B认证

在辅助驾驶技术飞速迭代的今天,如果说高精度的卫星定位决定了车辆感知能力的“上限”,那么惯性测量单元(IMU)便是守住车辆行驶安全的“底线”,它就像人的内耳前庭,时刻感知着车辆的姿态、加速度和角速度。即便驶入隧道、地下车库或高楼林立的城市峡谷,卫星信号被遮挡时,这颗深藏于车身内部的“电子内耳”依然能持续输出运动数据,确保定位不中断、决策不失控。2026年7月22日,移远GNSS产品部总监方成(右)&TÜV奥地利集团中国区总裁黄飞。

297

WAIC 2026 | 这套智能双臂组装方案,让“柔性智造”触手可及

从“专机专用”到“通用智能”,宝维塔以精密组装为切入点,将通用具身智能从前沿技术概念,转化为可落地、可规模化复制的智造解决方案。简单来说,这套系统相当于给机器装上一副“仿生人眼”,能完整看清零件的立体外形,精准判断出零件的空间位置、摆放角度和状态,让机械臂精准知道零件在哪里、是什么姿势、该从哪里抓取。,比如“抓取右侧那个透明的圆形接头”,机械臂便能自主理解语义、识别目标、规划路径并避开障碍,一气呵成完成抓取。,无论是螺丝锁付、插拔装配、点胶贴合还是线束组装,都能快速适配,一台设备通吃多种工艺。

206

WAIC 2026 | 移远轮臂式具身机器人平台登场:让机器人“想明白、反应快、拿得稳”

7月19日,上海,2026世界人工智能大会(WAIC)移远展台现场。只需一个简单指令“给我一瓶XX饮料”——机器人识别、抓取、递送,一气呵成。不用重复指令,也不必靠遥控器“手把手”教学。它自己“理解透”你的需求,“看清楚”饮料在哪,“想明白”怎么伸手,“拿捏准”每一丝力道。从语音到动作,从意图到执行,这台机器人完成了一次完整的自主智能闭环。

398

跨越端侧AI落地鸿沟:移远通信大模型方案全面升级,重塑交互与效能

面对端侧AI大模型全面爆发的市场需求,如何帮助客户高效落地并抢占AI先机,已成为行业的核心命题。在WAIC 2026(世界人工智能大会)期间,为行业打通AI商业化落地“最后一公里”提供了全新思路。移远AI前沿技术中心总负责人王韬表示:“当整个行业都在为参数突破而欢呼时,我们选择了一条更务实的路——沉下心来,在端侧大模型领域持续深耕。因为我们深知,技术的终极意义不在于跑分,而在于落地。

196

WAIC 2026 | 移远SleepHub首发:以声学AI重新定义智能电动床交互体验

7月17日,2026世界人工智能大会(WAIC)在上海盛大启幕,。这套方案专门为电动床品牌与制造厂商打造,采用。其内置VA501语音模组,提供丰富的离线语音交互功能,不仅支持连续对话、深度定制指令词、主被动语音播报,还自带鼾声检测、双区空间识别与床体姿态联动能力。简言之,SleepHub为电动床厂商提供了一套“听得懂指令、能主动守护”的语音交互中枢,帮助产品快速实现智能化升级。随着睡眠健康消费持续升级,电动床正从单一机械调节,向智能化、个性化交互快速演进。

318

音频的驱动

音频校准工具可调整内置 codec 输入增益(包含模拟增益,adc增益),输出增益(包含模拟增益,dac增益,算法增益),侧音增益。生效模式分为实时生效模式,和非实时生效模式,通过 API控制。其中非实时生效模式下,调整的参数将会在下次播放/通话时才能生效。工具可适配整多种应用场景,和多种输入/输出通道。音频工具调整好参数后,可以直接固定到NV文件中,作为默认音频参数。

232

移远通信全面入局XR:发布Hawk+Dolphin产品矩阵,打通XR从参考设计到规模量产的最后一公里

而对于XR,我们坚定地相信,下一代人机交互的核心入口,将是我们的眼睛。面对消费级用户与垂直行业提出的近乎苛刻的新要求——产品要好、速度要快、供应要强,移远提出了"0-1、1-N、1+N"三维能力框架——聚焦XR软硬件参考设计与定义,解决规模化阶段的精密制造与交付速度,以及提供全产业链生态整合服务。算力单元不仅可与AR眼镜连接,提供丰富的OS资源和AI交互能力(以Agent为中心的意图控制与指令交互),还可通过有线或无线方式连接3D头显、显示器等更多种类终端,大大拓展应用场景,成为工作生活中的智能助手。

426

移远这项“小而美”的技术,拿下汽车电子大奖!

同时,它全面支持n41/n77/n78/n79等5G核心频段(覆盖国内主流运营商)和全频段的天线调谐,无论车辆行驶在隧道、山区还是城市密集区,都能保持高速率、低延迟、高可靠的稳定连接。这项技术的“含金量”究竟体现在哪?简单来说,传统射频方案好比买了一套功能繁多的“豪华工具箱”——虽然什么都能干,但车企实际只用到其中几样,却要承担高昂的成本和冗余的功耗。移远通信将继续以硬核创新为引擎,携手产业链伙伴,推动5G车载通信从“高端选配”加速迈向“规模标配”“深度定制”,共同奔赴智能出行新未来。

212

MWC26上海 | 移远RG155UC-CN:突破性架构精裁,成就5G RedCap“质优价更轻”

6月26日,在MWC26上海展会期间,作为面向RedCap场景深度定制的标杆模组,RG155UC-CN真正实现“轻量5G,硬核性能”。产品以三大核心优势,全方位解决传统5G模组尺寸偏大、功耗偏高、场景适配受限等行业痛点,为等海量轻量化终端提供高性价比、高效率的5G规模化落地全新方案,推动5G RedCap全面迈入普惠商用新阶段。

369

MWC26上海直击!移远割草机器人解决方案:让庭院作业“智”在必得

6月25日,在MWC26上海展会期间,当前,家用与商用智能割草机器人市场迎来规模化增长,行业竞争日趋白热化,各大厂商对产品快速落地、性能稳定可靠、高性价比的需求达到前所未有的高度。在此背景下,一套兼顾高效、优质、高性价比的全链路解决方案,已然成为决胜市场的关键。过去,开发一个新机型往往需要从底层硬件做起,从零开始进行系统设计、硬件搭建与调试,周期长、投入大。移远的破局之道在于“积木式”模块化设计。

217

数码管-应用

数码管/LED 点阵是嵌入式系统中常见的显示方案,该方案比 LCD 显示屏占用更少的引脚和内存资源,实现也更加简单,比较适合计时、计数、状态显示等具有单一显示需求的应用场景。数码管主要有 LED 数码管、LCD 数码管和 VFD 数码管等类型。

209

MWC26上海 | 移远首款MediaTek平台旗舰级AI算力模组震撼登场

6月25日,在MWC26上海展会期间,,打通了高阶AI算力向千行百业端侧渗透的关键脉络。,广泛适用于等高端场景,助力客户在边缘计算与AI原生应用浪潮中抢占先机。MediaTek物联网事业部总经理王镇国表示:“移远是MediaTek长期信赖的战略合作伙伴,此次作为MediaTek Genio Pro 旗舰平台的首批客户深度参与联合研发,意义深远。

357

触摸屏-应用

驱动中已经集成了电阻触摸屏的校准算法,校准过程屏幕会点亮四个点,依次点击来校准,采集数据进行数据比对,误差太大则点击失败,重新点击。调用校准函数 xtp2046.adjust()将会在屏幕上开始校准的过程,校准完成后,将参数保存在文件中,下次初始化 xtp2046 时读取校准数据,避免每次使用前的重复校准。触摸屏的分辨率设置也是很重要的,因为触摸屏旋转后的换算依赖于触摸屏的宽和高分辨率大小,设置不当将无法得到正确的旋转效果。每种类型的触摸屏都有其优点和适用的场合,选择哪种类型主要取决于具体的应用需求。

265

显示器-调试

请参考LCM 接口 API和SPI LCD 接口 API。lcd.mipi_init 接口原型参数类型说明initbufbytearray必传,传入 MIPI 的配置命令widthint缺省值:480,屏幕的宽度,单位像素,示例:width=400hightint缺省值:854,屏幕的高度,单位像素,示例:hight=800bppint缺省值:16,像素深度DataLaneint缺省值:2,数据通道MipiModeint。

268

通过AEC-Q104测试!移远5G+AI智能座舱模组以硬核实力领跑赛道

AEC-Q104是由汽车电子协会(AEC)制定的针对车载多芯片模块(MCM)的可靠性测试标准,覆盖极端高低温、温度冲击、振动、机械冲击等多维严苛测试,是车载电子进入前装供应链的核心准入门槛。而AS830M可彻底改变这一局面,减轻客户的重复测试负担,显著降低系统失效风险与供应链管理成本,有效缩短前装量产周期,助力高端智能座舱快速、安全落地。未来,移远通信将持续推进不同算力规格舱联模组的AEC-Q104合规测试,助力汽车行业域控融合,为客户提供更多优质的舱联解决方案。

279

锚定AI原生新赛道!移远携全系车载方案闪耀2026高通汽车峰会

6月4-5日,以“智启新程”为主题的2026高通汽车技术与合作峰会在无锡国际会议中心盛大举行。全球整车厂、Tier 1及产业链领军企业齐聚一堂,共探智能汽车产业新趋势。会上,发表致辞。孟樸指出,汽车正从交通工具演变为高度智能化、持续进化的移动空间,并将进一步成为智能体A最重要的移动载体之一,能够感知环境、理解用户、协同服务。2026年已进入“智能体之年”,AI智能体正推动人机交互与设备协同迈向新阶段。高通凭借从终端到数据中心的跨层级系统能力,让智能无处不在、触手可及。

321

显示器-应用

对屏幕进行分类的讨论将有助于我们对驱动的理解,这里将按照屏幕可显示的色彩来分类,而非 OLED、LCD 等屏幕的面板材料。旋转了屏幕后,显示内容不见了。这可能是因为屏幕面板的分辨率小于屏幕控制器的分辨率,导致旋转后显示区域没有完全落在屏幕面板上,这时应考虑设置正确的显示区域偏移。现代显示器的种类非常多样化,它们用于各种不同的设备和应用,从个人计算机到商业广告屏,从手机到电视,从游戏设备到嵌入式设备等。嵌入式系统中的显示器需求可能会根据具体的应用和性能需求有所不同,因此选择适合的显示器类型是非常重要的。

339

USB应用指导

当设备被连接到主机时,设备控制器驱动需要识别这个事件,并响应主机的初始化请求,例如提供设备描述符(Device Descriptor),这是一个描述设备特性(例如设备类型、制造商ID、产品ID等)的数据结构。蜂窝通信模组作为一个USB设备(或称为USB从设备,USB Device),可以通过USB接口连接到主机(比如PC或嵌入式主控板)。以上的速率都是理论上的最高值,在实际应用中,由于各种原因(包括但不限于USB控制器的性能,设备的性能,线缆的质量,以及系统的负载等),实际的传输速率可能会低于这些值。

266

ADC-应用

因此,一个8位的ADC可以将输入范围分成2的8次方(256)个不同的离散级别,而一个12位的ADC可以将输入范围分成2的12次方(4096)个离散级别。检测电池电压的原理是采用电阻分压的方法,即硬件上用两个电阻把电池电压进行比例分压,把分压后的电压送到模组ADC管脚进行检测,软件根据模组ADC读取的电压值经过换算计算出电池的电压。连接硬件:如下图所示,ME4055A的CHRG和STDBY分别接模组的GPIO,BAT接电池正极,VCC接电源,通过把电池电压分压,接入到模组的ADC管脚,以测量电池电压。

256

PWM- 脉宽调制

对于直流电机来讲,当给电机提供电源时,电机会转动,但是是一点一点的提速,在突然停止供电给电机供电时,电机由于电感有防止电流突变的作用是不会停止的,会保持这原有的转速,以此往复,电机的转速就是周期内输出的平均电压值,所以实质上我们调速是将电机处于一种,似停非停,似全速转动又非全速转动的状态,那么在一个周期的平均速度就是我们占空比调出来的速度了。上图中,T 表示周期,W 表示脉宽,ton 是高电平阶段,toff 是低电平阶段,则 T=ton+toff,频率 f=1/T,占空比=W/T。

347

SPI-概述

SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线。SPI使用了主设备和从设备的概念。在任何给定的SPI通信中,有一个主设备和一个或多个从设备。主设备负责启动和结束通信会话。

401
上一篇: 存储设备应用指导
下一篇: 解锁Wi-SUN潜能!移远通信发布KCM0A5S模组,点亮智慧城市新图景
移远通信
移远通信 企业官方账号 企业官方账号
博客等级 码龄7年 1519粉丝 516原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值