SylixOS

SylixOS EEPROM 驱动

谁说胖子不能爱 提交于 2020-12-08 12:01:10
EEPROM简介 EEPROM全称为Electrically Erasable Programmable read only memory,带电可擦除可编程只读存储器,是一种掉电数据不会丢失的存储芯片。 EEPROM的擦除不需要借助于其它设备,它是以电子信号来修改其内容的,而且是以Byte为最小修改单位,不必将资料全部洗掉才能写入,彻底摆脱了EPROM Eraser和编程器的束缚。EEPROM在写入数据时,仍要利用一定的编程电压,此时,只需用厂商提供的专用刷新程序就可以轻而易举地改写内容,所以,它属于双电压芯片。借助于EEPROM芯片的双电压特性,可以使BIOS具有良好的防毒功能,在升级时,把跳线开关打至“on”的位置,即给芯片加上相应的编程电压,就可以方便地升级;平时使用时,则把跳线开关打至“off”的位置,防止CIH类的病毒对BIOS芯片的非法修改。所以,至今仍有不少主板采用EEPROM作为BIOS芯片并作为自己主板的一大特色。 2.EEPROM举例 本章以FM25V20A 为例说明EEPROM 的工作原理。 2.1EEPROM的访问方式 根据芯片厂商不同的设计,可以通过SPI或者I2C访问EEPROM。FM25V20A是通过SPI总线访问的。访问芯片时,主机应该先发送操作码,EEPROM识别相应的操作码之后才能继续相应读写操作。FM25V20A定义命令码如图 2.1所示。 图

SylixOS SPI

随声附和 提交于 2020-12-08 10:28:41
目 录 1 SPI总线关键结构体... 1 1.1 总线传输控制消息块... 1 1.2 SPI总线适配器... 2 1.3 SPI设备... 3 2 SPI各个结构体之间的联系... 3 2.1 总线链表... 3 2.2 总线与设备... 3 3 参考资料... 4 SPI总线关键结构体 总线传输控制消息块 传输控制消息包括操作单位bits数、传输控制参数(时钟极性、相位和字节序等配置)、发送和接收缓冲区及其长度、传输结束的回调函数。如程序清单 1.1所示。 程序清单 1.1 typedef struct lw_spi_message { UINT16 SPIMSG_usBitsPerOp; /* 操作单位bits数 */ UINT16 SPIMSG_usFlag; /* 传输控制参数 */ #define LW_SPI_M_CPOL_0 0x0000 /* CPOL 配置 */ #define LW_SPI_M_CPOL_1 0x0001 #define LW_SPI_M_CPHA_0 0x0000 /* CPHA 配置 */ #define LW_SPI_M_CPHA_1 0x0002 #define LW_SPI_M_CPOL_EN 0x0004 /* 是否设置新的 CPOL 配置 */ /* 否则 CPOL 配置与上次传输相同*/ #define LW_SPI_M

SylixOS--内存空间映射关系

放肆的年华 提交于 2020-12-08 09:07:51
基本原理 内存空间如何映射是计算机原理和操作系统原理最基本也是最关键的要点之一。只有明白系统是如何排布和映射内存空间的,才能深入理解计算机原理和操作系统特性。 计算机体系结构图: 物理地址空间是通过内存总线实现的,空间中的一部分会安排各种片内设备的特殊功能寄存器(SFR);一部分会安排存储器,存储代码和数据;剩余的都是空洞,CPU如果访问的话会触发总线错误。 物理地址上也可能挂载部分ROM空间。这部分空间一般是用来存放BootLoader或主系统代码的。 虚拟地址空间是通过MMU实现的,CPU传递给MMU虚拟地址,MMU将虚拟地址转化为物理地址。 CPU在MMU初始化之前使用的是物理地址且是没经过cache的,之后CPU使用虚拟地址,可以通过cache加速也可以不经过cache访问。 对于DMA则只能使用物理地址且是不经过cache的。 SylixOS中对于不支持MMU的处理器架构,只设置物理地址空间。对于支持MMU的处理器架构只创建并设置一个虚拟地址空间。 SylixOS通过两个内存初始化映射表(结构体数组)_G_physicalDesc[]和_G_virtualDesc[]来分别描述物理内存空间和虚拟内存空间。这两个表位于 bsp/bspMap.h 文件中。 无论是物理地址空间还是虚拟地址空间,各个分区之间是不能重叠的,但物理地址空间和虚拟地址空间之间除了平板映射的分区外

SylixOS--gpiofd接口的实现

孤者浪人 提交于 2020-12-08 09:04:49
SylixOS中会把GPIO抽象为设备文件,应用层通过访问设备文件即可操作GPIO。除了按照文件的方式访问GPIO外,系统还封装了GpioFd接口,简化了应用层对GPIO的操作。这一篇来说明GpioFd接口是如何实现的,实现代码如下: /********************************************************************************************************* ** 函数名称: gpiofd ** 功能描述: 打开 gpiofd 文件 ** 输 入 : gpio gpio 号 ** flags 打开标志 GFD_CLOEXEC / GFD_NONBLOCK ** gpio_flags gpio 属性标志 ** 输 出 : gpiofd 文件描述符 *********************************************************************************************************/ LW_API int gpiofd ( unsigned int gpio , int flags , int gpio_flags ) { INT iFd ; INT iError ; CHAR cGpioName [ MAX

1024程序员节开源技术英雄会,参会“英雄榜”发榜

随声附和 提交于 2020-10-25 04:54:46
10月23-26日,由CSDN等多家单位精心筹划的“长沙 · 中国1024程序员节”将盛大举行。程序员节活动以开源为主议题,包括2场岳麓尖峰对话;2020开源技术英雄大会;10+场热门技术分论坛/峰会;创意集市;体验感超强的科技文化嘉年华、最HIGH时刻的开源之夜。内容聚焦开源技术及生态建设、操作系统及硬件创新、开源社区及商业化发展等多个重要话题。 尤其是此次重磅推出的“开源技术英雄会”,将以2020中国开源技术英雄的年度大聚会为核心,重磅邀请卓越的开源技术领袖和贡献者齐聚长沙,以“洞悉开源新变量”为主题,展开主题演讲与深度讨论。开源英雄群英荟萃,2020开源技术英雄会,必将成为一场交流真知灼见的开源生态大会。 CSDN作为中国专业的开发者社区,将联手多家单位,广发英雄帖,汇聚国内顶级开源英雄、开源项目、开源企业,共谱硬核科技与开源文化大图谱。 百余位开源英雄齐聚 , 岳麓山下技术“过招” 当前科技的发展,打造中国自主可控的开源生态,尤其是核心技术栈和开源生态系统,势在必行。藉由1024程序员节的召开,100余位卓越技术英雄齐聚“2020开源技术英雄会”,他们带来武功秘籍,在岳麓山下分享技术洞见,切磋过招! 最终出席嘉宾以现场为准 2020开源技术英雄会汇聚了来自学术界的顶尖学者、知名开源社区的领军人物,以及华为、阿里、百度、腾讯、滴滴、中科创达、海尔等顶尖企业

1024程序员节重要议程曝光,开源技术英雄会聊开源“真心话”

狂风中的少年 提交于 2020-10-22 17:38:59
10 月 23-25 日,由 CSDN 等多家单位精心筹划的“长沙 · 中国 1024 程序员节”将盛大举行。程序员节活动以开源为主议题,包括:2场岳麓尖峰对话;2020 开源技术英雄大会;10+ 场热门技术分论坛/峰会;创意集市;体验感超强的科技文化嘉年华;最 HIGH 时刻的开源之夜。内容聚焦开源技术及生态建设、操作系统及硬件创新、开源社区及商业化发展等多个重要话题。 目前,1024 程序员节重磅主题大会“开源技术英雄会”正式发布议程,大会将以 2020 中国开源技术英雄的年度大聚会为核心,重磅邀请了卓越的开源技术领袖和贡献者齐聚长沙,以“洞悉开源新变量”为主题,展开主题演讲与四大圆桌对话。开源英雄群英荟萃,2020 开源技术英雄会,必将成为一场交流真知灼见的开源生态大会。 2020 开源技术英雄会聚焦开源生态与中国软件未来机遇,硬核主题,深刻思辨 开源技术英雄会汇聚了来自学术界的顶尖学者、知名开源社区的领军人物,以及华为、阿里、百度、腾讯、滴滴、中科创达等顶尖企业、互联网大厂的众多技术领军者。将围绕开源技术如何驱动行业创新,以及中国软件的机遇和未来,展开一场前所未有的深度探讨。 2020 开源技术英雄会总日程(最终日程以现场安排为准) 开源技术英雄会上,CSDN 创始人&董事长、极客帮创投创始合伙人蒋涛将在大会发表演讲,就开发者在开源时代的新机遇分享独到观点

iMX6平台 SylixOS I2C总线驱动开发

99封情书 提交于 2020-08-12 20:34:01
原理概述 I2C总线驱动概述 I2C总线驱动是I2C适配器的软件实现,提供I2C适配器与从设备间完成数据通信的能力,比如起始,停止,应答信号和MasterXfer的实现函数。驱动程序包含初始化I2C总线控制器__i2cHwInit函数,操作函数集(总线传输__i2cTransfer函数,总线控制__i2cMasterCtl函数)。 Imx6ul控制器的硬件描述 imx6ul处理器内部集成了一个I2C控制器,通过五个寄存器来进行控制: I2Cx_IADR I2C地址寄存器 I2Cx_IFDR I2C分频寄存器 I2Cx_I2CR I2C控制寄存器 I2Cx_I2SR I2C状态寄存器 I2Cx_I2DR I2C数据寄存器 通过I2Cx_I2CR,I2Cx_IFDR,I2Cx_I2DR,I2Cx_IADR寄存器操作,可在I2C总线上产生开始位、停止位、数据和地址,而传输的状态则通过I2Cx_I2SR寄存器来获取。 I2C总线传输编程状态图 图 21 I2C 编程状态 技术实现 I2C总线驱动框架 imx6ul的I2C总线驱动代码在bspimx6ul/driver_module/iic_drv/src/目录下,如图 31所示: 图 31 I2C 总线驱动目录 imx6ul的I2C总线驱动代码在bspimx6ul/driver_module/iic_drv/src/目录下,如__所示:

SylixOS动态关核架构流程

半城伤御伤魂 提交于 2020-04-24 05:56:30
SylixOS动态关核接口 SylixOS 支持动态关核操作,通过如下应用函数; VOID Lw_PowerM_CpuSet(ULONG ulNCpus, UINT uiPowerLevel); 函数Lw_PowerM_CpuSet原型分析: 参数 ulNCpus是运行态的CPU 核个数; 参数 uiPowerLevel是CPU能耗级别。 基本流程 系统函数调用流程如图 2.1: Lw_PowerM_CpuSet( ),设置关核个数,判断设置运行态的核数与启动的核数是否相等,如果小于,则关闭一些核,判断将要关闭的核是否在运行API_CpuIsUp(),如果是则调用API_CpuDown()。 API_CpuDown(),通过LW_CPU_ADD_IPI_PEND2()设置将要关闭的核的CPU_iIPIPend为LW_IPI_DOWN_MSK,关闭与此 CPU 有关的亲和度_ThreadOffAffinity(),使用核间中断通知 CPU 停止_SmpSendIpi()。 SmpSendIpi(),调用核间中断函数xxxMpInt()响应核间中断,通知关闭核,xxxIntEntry中断入口函数,调用API_InterExit()中断出口函数; API_InterExit()调用__kernelSchedInt();kernelSchedInt 调用_ScheduleInt()尝试调度

SylixOS中AARCH64的GDB调试实现

♀尐吖头ヾ 提交于 2020-04-14 00:59:52
【今日推荐】:为什么一到面试就懵逼!>>> 1. GDB功能实现的框架 1.1 GDB的简介 GDB是GNU开源组织发布的一个强大的UNIX下程序调试工具。SylixOS中除Lite版本外,都可以实现GDB调试功能。 GDB可以对C和C++程序进行调试,它使用户能在程序运行时观察程序的内部结构和内存的使用情况。以下是GDB所提供的一些功能: 能监视程序中变量的值; 能设置断点以使程序在指定的代码行上停止执行; 能逐行执行代码。 1.2 GDB的组成框架 GDB由gdb-server和gdb-host组成。 目标板使用gdb-server来启动已经编译好的代码,执行断点、单步等调试动作,同时通过网络、串口等反馈调试需要的信息给gdb-host。 宿主机上运行gdb-host,解析gdb-server传来的信息,同时,发送断点、单步等动作给目标板。 2. SylixOS中GDB的实现 2.1 Base中已经实现的内容 在SylixOS中,gdb-server的主要通信流程和网络通信框架,已经在Base中实现,代码位置如下图所示。 这部分代码逻辑中,已经完成和gdb-host的通信逻辑。当在RealEvo-IDE中的Debug界面,进行单步,运行到指定行,全速运行等操作时,gdb-host实际通过对应架构的xxxx-sylixos-elf-gdb.exe工具与板卡内的gdb

【SylixOS】QT-QWS流程介绍

邮差的信 提交于 2020-03-24 08:24:21
3 月,跳不动了?>>> QWS简介 QWS(QT Windows System)是QT自行开发的窗口系统,体系结构类似X Windows的C/S结构。QWS Server在物理设备上显示,QWS Client实现界面,两者通过socket进行彼此的通讯。在很多嵌入式系统里,QT程序基本上都是用QWS来实现,这样保证程序的可移植性。 QWSServer服务端 QT程序没有严格区分服务端程序和客户端程序,通知指定-platform参数来确定程序是客户端还是服务端程序,对于QWSServer功能主要作为服务端程序统一管理多客户端鼠标键盘事件,以及不同客户端窗口重叠渲染管理等。 服务端初始化主要流程: 初始化QWSServerSocket网络,当有客户端连接接入是会创建对应的QWSClient,来管理客户端程序事件收发。 初始化QWSDisplay管理窗口显示。 初始化QWSCursor管理鼠标键盘事件,主要包含两个主要的类QWSMouseHandler和QWSKeyboardHandler。 QWSDiplay QWSDiplay主要管理客户端和服务端网络事件和请求管理。通过QWSCommand管理窗口操作的一些列请求,通过QWSEvent管理鼠标键盘事件等。 QWSClient客户端 QWSClient在QWS系统中属于客户端在服务端的代理对象