sd-mmc

宋宝华:那些年你误会的Linux DMA(关于Linux DMA ZONE和API最透彻的一篇)

ε祈祈猫儿з 提交于 2020-11-28 08:41:46
原创 宋宝华 Linux阅码场 2019-11-29 创作目的 互联网、Linux内核书籍上充满了各种关于Linux DMA ZONE和dma_alloc_coherent、dma_map_single等的各种讲解,由于很多童鞋缺乏自身独立的思考,人云亦云,对这些概念形成了很多错误的理解。本文的目的在于彻底澄清这些误解。 当你发现本文内容与baidu到的内容不一致的时候,以本文内容为准。 本文目录 1.DMA ZONE的大小是16MB? 这个答案在32位X86计算机的条件下是成立的,但是在其他的绝大多数情况下都不成立。 首先我们要理解DMA ZONE产生的历史原因是什么。DMA可以直接在内存和外设之间进行数据搬移,对于内存的存取来讲,它和CPU一样,是一个访问master,可以直接访问内存。 DMA ZONE产生的本质原因是:不一定所有的DMA都可以访问到所有的内存,这本质上是硬件的设计限制。 在32位X86计算机的条件下,ISA实际只可以访问16MB以下的内存。那么ISA上面假设有个网卡,要DMA,超过16MB以上的内存,它根本就访问不到。所以Linux内核干脆简单一点,把16MB砍一刀,这一刀以下的内存单独管理。如果ISA的驱动要申请DMA buffer,你带一个GFP_DMA标记来表明你想从这个区域申请,我保证申请的内存你是可以访问的。 DMA ZONE的大小,以及DMA

宋宝华:那些年你误会的Linux DMA(关于Linux DMA ZONE和API最透彻的一篇)

久未见 提交于 2020-11-28 08:39:14
原创 宋宝华 Linux阅码场 2019-11-29 创作目的 互联网、Linux内核书籍上充满了各种关于Linux DMA ZONE和dma_alloc_coherent、dma_map_single等的各种讲解,由于很多童鞋缺乏自身独立的思考,人云亦云,对这些概念形成了很多错误的理解。本文的目的在于彻底澄清这些误解。 当你发现本文内容与baidu到的内容不一致的时候,以本文内容为准。 本文目录 1.DMA ZONE的大小是16MB? 这个答案在32位X86计算机的条件下是成立的,但是在其他的绝大多数情况下都不成立。 首先我们要理解DMA ZONE产生的历史原因是什么。DMA可以直接在内存和外设之间进行数据搬移,对于内存的存取来讲,它和CPU一样,是一个访问master,可以直接访问内存。 DMA ZONE产生的本质原因是:不一定所有的DMA都可以访问到所有的内存,这本质上是硬件的设计限制。 在32位X86计算机的条件下,ISA实际只可以访问16MB以下的内存。那么ISA上面假设有个网卡,要DMA,超过16MB以上的内存,它根本就访问不到。所以Linux内核干脆简单一点,把16MB砍一刀,这一刀以下的内存单独管理。如果ISA的驱动要申请DMA buffer,你带一个GFP_DMA标记来表明你想从这个区域申请,我保证申请的内存你是可以访问的。 DMA ZONE的大小,以及DMA

ESP32 开发笔记(三)源码示例 9_SPI_SDCard 使用SPI总线实现TF卡文件系统示例

那年仲夏 提交于 2020-09-30 12:18:42
开发板购买链接 https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=626366733674 开发板简介 开发环境搭建 windows 源码示例: 0_Hello Bug (ESP_LOGX与printf) 工程模板/打印调试输出 1_LED LED亮灭控制 2_LED_Task 使用任务方式控制LED 3_LEDC_PWM 使用LEDC来控制LED实现呼吸灯效果 4_ADC_LightR 使用ADC读取光敏电阻实现光照传感 5_KEY_Short_Long 按钮长按短按实现 6_TouchPad_Interrupt 电容触摸中断实现 7_WS2812_RMT RGB_LED彩虹变色示例 8_DHT11_RMT 使用RMT实现读取DHT11温湿度传感器 9_SPI_SDCard 使用SPI总线实现TF卡文件系统示例 10_IIC_ADXL345 使用IIC总线实现读取ADXL345角度加速度传感器 11_IIC_AT24C02 使用IIC总线实现小容量数据储存测试 12_IR_Rev_RMT 使用RMT实现红外遥控接收扫码(NEC) 13_IR_Send_RMT 使用RMT实现红外数据发送(NEC) 14_WIFI_Scan 附近WIFI信号扫描示例 15_WIFI_AP

【实验室乱记】基于stm32的采集Adc与SD卡储存

懵懂的女人 提交于 2020-07-27 08:35:04
杂 序 实验室 简介 调用的资源:Adc 调用的外设:SD卡 实现过程 Adc SD卡 主函数代码 序 这篇文章向大家介绍下基于STM32F4的adc采集与SD卡储存 实验室 学长的要求是利用STM32采集Adc值转存于SD中 后利用Matlab进行快速傅里叶变化分析频率( FFT天下第一 ) 简介 ST (意法半导体)推出了以基于ARM® Cortex™-M4为内核的STM32F4系列高性能微控制器,其采用了90 纳米的NVM 工艺和ART(据说以后可以操作学长的28nm工具 FPGA )。 /这里用的是某点原子 调用的资源:Adc 模拟数字转换器即A/D转换器,简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件。 调用的外设:SD卡 SD卡相对于u盘、flash来说是比较适合于单片机系统的大容量存储设备,容量选择尺度大(几十M 到几十G) 、更换简单、移动方便,是单片机大容量外部存储器的首选。 实现过程 Adc ADC 的通道与引脚的对应关系在 STM32F4 的数据手册可以查到,这里使用 ADC1 的通道 5 首先初始化IO 设置为模拟输入 __HAL_RCC_ADC1_CLK_ENABLE ( ) ; //使能 ADC1 时钟 __HAL_RCC_GPIOA_CLK_ENABLE ( ) ; //开启 GPIOA 时钟 GPIO_Initure . Pin =

Fuchsia MMC框架简析

老子叫甜甜 提交于 2020-04-19 17:29:51
本文简单分析下Fuchsia的MMC框架,主要是基于mmc协议的初始化流程进行说明。至于mmc框架中的SD以及SDIO协议流程本文不涉及。另外,Fuchsia块设备层以及文件系统层的分析,本文也不涉及。 下表为目前rcar-M3单板系统的“设备树”(为描述方便,省略了部分设备树节点)。 root$ dm dump [root] <root> pid=2524 [null] pid=2524 /boot/driver/builtin.so [zero] pid=2524 /boot/driver/builtin.so [misc] <misc> pid=2607 [console] pid=2607 /boot/driver/console.so …… [sys] <sys> pid=2439 /boot/driver/platform-bus.so [platform] pid=2439 /boot/driver/platform-bus.so [rcar-m3] pid=2439 /boot/driver/rcar-m3.so [16:01:1] pid=2439 /boot/driver/platform-bus.so <16:01:1> pid=2958 /boot/driver/platform-bus.proxy.so [sh_mobile_sdhi] pid=2958