嵌入式开发
文章平均质量分 86
MyeDy
固件开发
展开
-
如何利用qemu搭建SOC protoype:80行代码实现一个Cortex M4 模拟器
随着国内芯片公司越来越多,越来越多的底层程序员需要在pre silicon阶段就要开发代码。而在pre silicon阶段测试方式有多种:方式优点缺点RTL simulation可以验证最准确的硬件行为,可以测试SOC相关代码仿真速度非常慢,且rtl freeze之前硬件有bugFPGA/ZEBU emulation可以验证部分硬件行为,速度相对RTL simulation快价格昂贵,难以布署大量测试,且有些硬件没法仿真软件模拟器,如QEMU速度最快,可以布署大原创 2021-01-22 14:51:52 · 5051 阅读 · 8 评论 -
imx6ull-qemu 裸机教程1:GPIO,IOMUX,I2C
无意间搜到了韦东山老师的6ul网站,上面有一个6ul的qemu仿真器,下载下来用了用,非常好用,有UI,比原装的qemu-system-arm提供的6ul开发板多了很多功能。下面贴出的就是韦东山老师的qemu网站:百问网imx6ull-qemu但是默认的跑了linux,没有裸机的例程。所以本文写了几个裸机的程序以供参考学习6UL芯片。本教程源码目标实现以下模块的裸机程序:GPIO L...原创 2020-01-29 09:53:07 · 5761 阅读 · 9 评论 -
armv8m(cortex m33) MPU实战
文章目录1 MPU1.1 Memory attributes summary1.2 MPU寄存器1.2.1 MPU Type Register1.2.2 MPU Control Register1.2.3 MPU Region Number Register1.2.4 MPU Region Base Address Register1.2.5 MPU Region Limit Address Re...原创 2020-01-08 20:37:33 · 6626 阅读 · 6 评论 -
FATFS FAT32学习小记
FAT32概述FAT32文件系统由DBR及其保留扇区,FAT1,FAT2 和 DATA 四个部分组成,其机构如下图: 这些结构是在分区被格式化时创建出来的,含义解释如下:DBR及其保留扇区:DBR的含义是DOS引导记录,也称为操作系统引导记录,在DBR之后往往会有一些保留扇区。 FAT1:FAT的含义是文件分配表,FAT32一般有两份FAT,FAT1是第一份,也是主FAT。 FA...原创 2018-08-01 13:22:35 · 6877 阅读 · 3 评论 -
AMBA协议学习小记
AMBAAPBAPB2接口PCLK -Peripheral clockPADDR[..] -Peripheral address busPWRITE -Peripheral read/write signalPWDATA[..] -Peripheral write data busPRDATA[..] ...原创 2018-07-15 13:45:16 · 9867 阅读 · 4 评论 -
x509解析
文章目录X509X509X509的ASN.1定义:[Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING}首先,一张x509证书最顶层包含三个东西。TBSCertificate是X509里最重要...原创 2019-05-09 17:39:56 · 6022 阅读 · 2 评论 -
SPI NAND FLASH小结
文章目录1 SPI NAND接口2 寻址常用型号3 Feature寄存器MX35LFxGE4AB4 读时序1 SPI NAND接口一般来说,SPI的接口就是6个IO,CS, CLK, SI, SO, WP, HOLD。IO位数输入输出SingleSISODualSISI(IO0), SO(IO1)QuadSISI(IO0), SO(IO1), ...原创 2019-07-12 16:41:31 · 18553 阅读 · 0 评论 -
EMMC/SD学习小记
eMMC之分区管理、总线协议和工作模式 JDEDC EMMC 协议中文 SD卡协议中文2.0 3.0EMMC4.4 非Boot模式读流程等待74个时钟CMD0 复位emmc至idle状态 命令索引 类型 参数 应答 缩写 命令说明 CMD0 bc 00000000 - GO_IDLE_STATE 复位设备至idle状态...原创 2018-04-15 12:51:53 · 4108 阅读 · 0 评论 -
ECDSA 签名验证原理及C语言实现
这两天总算把ECDSA搞明白了,本来想造个ECDSA轮子,但最近有点忙,而ECDSA轮子又不像HASH那样简单,所以就直接拿现成的轮子来记录一些ECDSA学习心得。 这里贴上github上一个比较适合学习的ECDSA代码,当然这个版本的代码没有openssl等商业级的代码专业,但是它足够简单,用来学习ECDSA原理非常合适。 easy-ecc非对称加密算法签名/验证无非包括三步: 1. ...原创 2018-03-25 20:13:28 · 29782 阅读 · 17 评论 -
CMSIS CM3源码注解
文中截图摘自《Cortex_M3权威指南》core_cm3.h1 Memory Map/* Memory mapping of Cortex-M3 Hardware */#define SCS_BASE (0xE000E000) /*!< System Control Space Base Ad...原创 2018-03-18 13:16:05 · 1946 阅读 · 0 评论 -
ARMCC/GCC下的stack protector
Stack overflow攻击是一种很常见的代码攻击,armcc和gcc等编译器都实现了stack protector来避免stack overflow攻击。虽然armcc和gcc在汇编代码生成有些不同,但其原理是相同的。这篇文章以armcc为例,看一看编译器的stack protector。armcc提供了三个编译选项来打开/关闭stack protector。–no_protect_stac原创 2017-05-20 15:59:59 · 4883 阅读 · 0 评论 -
armv7a中的SMC指令应用
工作中用到了smc指令,感觉除了arm的手册介绍这个指令的资料并不是太多,所以写这篇文章记录一下。 SMC是TrustZone的一部分。Non-Secure world要切换到Secure-World的时候需要进入Monitor模式才能进行操作,而在armv7a中就是通过SMC指令进入到TrustZone。本文中只介绍跟SMC指令相关的东西,并不介绍TrustZone。本文中的所以指令的运行都是运原创 2017-08-19 09:15:47 · 12966 阅读 · 1 评论 -
HyperBus Nor Flash小记
InterfaceMandatory I/O Summary Symbol Type Description CS# 主设备输出,从设备输入 Chip Select:当改信号从High变为Low时,HyperBus开始传输。 当该信号从低变为高时, HyperBus结束传输。 CK,CK# 主设备输出,从设备输入 Differential Clock:comma原创 2017-11-06 21:01:32 · 8714 阅读 · 6 评论 -
自制嵌入式操作系统 DAY2
话不多说,直接进入正题,今天要实现的便是RTOS任务相关的所有功能1 临界区保护本节代码在05_critical下为什么需要临界区保护呢,请看下图: 当task1要对共享资源进行读-改-写操作时,在写回之前被某一事件中断打断切换到task2,而此时task2恰巧也有修改共享资源x的代码,此时task2将共享资源修改成了11,当完成这个操作后,task2交出cpu控制权,此时R...原创 2018-02-21 18:17:22 · 717 阅读 · 0 评论 -
自制嵌入式操作系统 DAY1
遥想当年刚学习操作系统的时候,很难理解教科书中关于线程/进程的描述。原因还是在于操作系统书上的内容太过抽象,对于一个没有看过内核代码的初学者来说,很难理解各种数据结构的调度。后来自己也买了一些造轮子的书,照着好几本书也造了几个玩具操作系统,有X86,有ARM的。经过实践之后回头再去看操作系统的书,才恍然大悟操作系统书中所写的知识点。 看了许多操作系统实践类的书籍后,有些书只是浅尝辄止,试图用30...原创 2018-02-19 19:26:06 · 5978 阅读 · 1 评论 -
SHA512/384 原理及C语言实现(附源码)
闲来无事,造个哈希轮子,SHA384/SHA512这两者原理及实现一样的,只是输出和初始化的向量不一样。原型hash_val = sha512/384(message). hash_val: SHA512输出是512bit(64个byte),SHA384输出是384bit(48个byte) message: 0 < bits(message) < 2^128,messa...原创 2018-03-03 15:51:40 · 10567 阅读 · 2 评论 -
自制嵌入式操作系统 DAY3
今天实现事件控制块,存储管理以及定时器。1 事件控制块本节代码位于12_event中什么是事件控制块呢?可以这样理解,前面学习我们已经知道,创建一个任务需要给这个任务分配一个任务控制块,这个任务控制块存储着关于这个任务的重要信息。那么,事件控制块就好比任务里的任务控制块。它存储着这个事件的重要信息,我们说创建一个事件(信号,邮箱,消息队列),其本质的过程就是初始化这个事件控制块...原创 2018-03-04 20:13:11 · 712 阅读 · 0 评论