![](https://img-blog.csdnimg.cn/dcc9de474aec400cb3805dc450e6be6f.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
主流单片机开发(MCU)
文章平均质量分 64
主流单片机编程技巧与实用知识
最后一个bug
我是bug菌,一名嵌入式软硬件技术爱好者,我来csdn了~
展开
-
底板外设倒灌到处理器分析
倒灌是指当外设向处理器提供的信号电平超出了处理器能够接受的范围,导致处理器无法正常启动或工作的现象。在设计嵌入式系统时,必须非常注意处理器和外设之间的电气兼容性和信号完整性,以防止倒灌等问题的发生。通过合理的硬件设计和选择合适的电气组件,可以有效地减少这些问题的发生,并确保系统的稳定性和可靠性。信号反向传播: 在系统中,某些情况下可能会发生信号的反向传播,导致外设向处理器发送错误的信号。过电流保护: 如果外设向处理器提供的电流超出了处理器的额定电流范围,可能会导致处理器无法正常工作或损坏。原创 2024-06-08 12:23:45 · 289 阅读 · 0 评论 -
Flash均衡算法几个点
由于Flash存储器的特性,擦除操作比写入操作要慢得多,而且每个块都有一个有限的擦除寿命,因此如何高效地管理擦除操作对于提高Flash存储器的性能和寿命非常重要。对于使用频繁的块,可以采取较小的擦除操作,对于使用较少的块,则可以进行更大范围的擦除操作。通过采用Flash均衡保存算法,可以有效地减少擦除操作的次数,提高Flash存储器的写入性能和寿命,同时也有助于降低系统的维护成本和延长设备的使用寿命。块合并: Flash均衡保存算法通常会对新数据进行缓冲,等待一定数量的写入操作后再进行实际的擦除操作。原创 2024-06-08 11:23:10 · 268 阅读 · 0 评论 -
芯片软件复位的作用
综合来看,使用软件复位而不是频繁地通过断电来实现复位操作可以提高系统的稳定性和数据完整性,延长硬件设备和存储介质的使用寿命,但在某些特定情况下,如系统完全崩溃时,仍然需要考虑通过断电操作来恢复系统。故障恢复: 在系统发生软件故障或死锁情况下,软件复位是一种常用的方法来恢复系统运行,它可以通过重新启动系统来清除潜在的问题,并使系统重新回到可用状态。性能优化: 通过定期进行软件复位,可以清除系统中的临时数据和缓存,从而有助于提高系统的性能和响应速度,特别是对于长时间运行的系统而言。原创 2024-06-08 11:15:49 · 262 阅读 · 0 评论 -
详细介绍下OP-TEE,以及TF-A与OP-TEE的关系
OP-TEE(Open Portable Trusted Execution Environment)是一个开源的可信执行环境(TEE)框架,用于嵌入式系统中的安全应用程序执行。它提供了一种安全的执行环境,用于保护敏感数据和执行安全操作。OP-TEE有如下功能:可信执行环境(TEE):OP-TEE为安全敏感的应用程序提供了一个可信执行环境。TEE是一种硬件和软件的组合,用于创建与操作系统隔离的安全环境。在TEE中,敏感数据和安全操作可以得到保护,不受操作系统或其他应用程序的干扰。原创 2023-12-10 20:09:37 · 1399 阅读 · 0 评论 -
四款主流的轻量级嵌入式网络协议栈
正文大家好,我是bug菌~明天又周五了,相信今天的心情应该是不错的~在嵌入式开发软件中网络协议栈实在是太重要了,可以说现在凡是被称为智能的设备,几乎都需要具备联网的功能。然而让自己手上的平台具有联网的功能,基本上都会要选择一款软件网络协议栈,当然啦用硬件协议栈也挺多的,不多相对来说功能比较容易受限。而软件协议栈徒手写的话,可以说对于大部分普通开发者而言是不太现实的。毕竟成熟的开源的网络协议栈挺多的...原创 2023-12-14 21:48:49 · 1249 阅读 · 0 评论 -
这嵌入式“玩具”也太酷了吧~
大家周末好,我是bug菌~今天看到有朋友晒出了一个“玩具”,实在是太酷了,嵌入式开发人员谁不爱?于是去了解了下,顺便分享给大家~这机器是clockwork推出的uconsole,console大家这应该很熟悉,也就是终端嘛,嵌入式软件开发人员基本上都是终端玩家~uConsole支持各种幻想游戏机和独立游戏引擎。不需要局限于特定的工具,使用您最喜欢的编程语言和开发环境,随心所欲。技术规格如下:CPI...原创 2023-12-09 21:42:32 · 1862 阅读 · 1 评论 -
详细介绍开源固件-TF-A
TF-A(Trusted Firmware-A)是一种用于嵌入式系统的开源固件,而不是Linux的一部分。TF-A主要用于ARM架构的处理器和设备,它提供了一组安全和可信任的软件组件,用于引导和初始化系统。如下是其主要的一些功能:安全引导和初始化:TF-A的主要功能之一是提供安全的引导和初始化过程。它确保系统在启动时验证引导加载程序(如U-Boot)的完整性,并验证后续的固件链,以确保系统软件的完整性和可信度。原创 2023-12-10 19:53:40 · 732 阅读 · 0 评论 -
C语言使用posix正则表达式库
在C语言中,你可以使用 POSIX 正则表达式库(regex.h)来进行正则表达式的模式匹配。POSIX 正则表达式库提供了一组函数来编译、执行和释放正则表达式。请注意,在使用 POSIX 正则表达式库时,需要根据返回值进行错误处理,例如检查编译是否成功、匹配是否发生等。原创 2023-12-17 20:30:04 · 837 阅读 · 0 评论 -
udp多播/组播那些事
在网络通信中,单播(unicast)是一对一的通信方式,广播(broadcast)是一对所有的通信方式,而多播(或组播)是一对多的通信方式。多播地址是一个预定义的IP地址范围,用于标识多播组,而广播地址则是一个特殊的IP地址,用于向网络中的所有主机发送数据包。简而言之,接收端绑定本地端口是为了告诉操作系统将接收到的多播数据包传递给相应的应用程序,而发送端无需显式地绑定本地端口,操作系统会自动选择一个可用的本地端口进行发送。绑定本地端口的步骤通常在接收端的代码中进行,以便接收来自多播组的数据包。原创 2023-12-25 22:22:44 · 1388 阅读 · 0 评论 -
lwip优化任务优先级
如果将ethernetif_input线程的优先级设置得高于tcpip主线程,那么在有大量网络数据包需要处理时,ethernetif_input线程可能会长时间占用CPU资源,导致tcpip主线程无法及时响应lwIP协议栈中的其他事件和数据包,从而影响整个系统的响应性能。因此,为了确保lwIP协议栈的正常运行和系统的稳定性,通常建议将ethernetif_input线程的优先级设置为低于tcpip主线程的优先级,以确保网络数据包的处理不会过度干扰到lwIP协议栈的其他功能。原创 2024-03-15 21:16:53 · 677 阅读 · 1 评论 -
ftruncate函数解析
截断文件:将文件的大小截断为指定的长度 length。需要注意的是,ftruncate() 只能操作已打开的文件,而不会创建新文件。另外,扩展文件大小时,新增加的部分是未初始化的,即填充为零字节。ftruncate() 是一个用于调整文件大小的函数,它可以截断或扩展一个已打开的文件。上述示例中,ftruncate() 函数将文件 “file.txt” 的大小截断为 100 字节。扩展文件:如果 length 大于原文件大小,则文件会扩展到指定的长度,扩展部分将由空字节填充。原创 2024-02-10 21:18:13 · 883 阅读 · 0 评论 -
C语言编译成库文件的要求
文档和版本控制: 对于库文件的使用方法、接口说明以及版本信息进行详细的文档记录,并采用合适的版本控制策略来管理库文件的开发和发布过程,以便于其他开发者能够理解和正确使用该库文件。函数和变量的可见性: 确保库文件中只包含外部接口的函数和变量,并将内部实现细节隐藏起来,可以通过使用static关键字或者在头文件中声明接口和定义实现分离来实现。具体的步骤可能会根据项目的具体需求和Keil版本的不同而有所变化,你可能需要查阅Keil的官方文档或参考相关的教程来执行这些步骤。原创 2024-03-10 02:11:47 · 563 阅读 · 0 评论 -
多播ip地址配置和通信理解
当设备加入一个多播组时,它将会加入一个特定的多播组地址,而该地址可以与设备的IP地址属于不同的网段。设备可以通过多播组地址来接收和发送多播数据包,而不需要与设备自身的IP地址具有相同的网段。多播组地址的选择是基于IP地址规划的一部分,用于标识多播组的目的。对于多播组地址,虽然它们在IP地址中被表示为具有不同的网络部分(即不同的网段),但这并不意味着它们需要与设备的IP地址具有相同的网段。多播组地址的确是用来标识多播组的目的,而不是用来直接进行设备之间的通信。原创 2023-12-25 22:36:30 · 910 阅读 · 0 评论 -
变换器电感饱和以及电流变大电感变小原因分析
当电感器饱和时,其磁场增加的速率减慢甚至停止,导致电感器的电感量发生变化,进而影响电路的性能。电感器损耗增加:当电感器饱和时,其内部磁场变化减慢或停止,电感器会吸收更多的电能转化为热能,导致电感器的损耗增加。总之,电感饱和是在高电流下电感器面临的一种现象,需要在设计和选择电感器时加以考虑,并采取适当的措施来避免饱和对电路性能的负面影响。控制电路中的电流:通过适当的电流控制手段,如电流限制器、电流反馈等,可以限制电感器的电流在安全范围内,避免饱和现象的发生。当电感器的电流增大时,其电感量通常会变小。原创 2024-01-09 00:08:27 · 1171 阅读 · 0 评论 -
udp广播的例子
请注意,上述示例假设广播地址为192.168.1.255,并使用UDP套接字进行广播发送和接收。您可以根据实际情况进行适当的更改,包括广播地址和端口号。在发送端,我们设置了套接字的广播选项,并将广播消息发送到指定的广播地址和端口。在接收端,我们绑定套接字到指定的接收端地址和端口,并接收来自广播的消息。注:广播发送和接收需要在同一个局域网中才能正常工作。原创 2023-12-25 22:41:24 · 811 阅读 · 0 评论 -
使用lwip的perf进行测速TCP不稳定的一些相关配置项
如果其他高优先级的中断或任务占用了过多的CPU时间,可能导致TCP处理被延迟,从而影响连接的稳定性。您可以考虑调整中断处理的优先级或优化其他任务的执行,以确保TCP处理得到适当的时间和资源。TCP窗口大小(TCP Window Size):TCP窗口大小决定了发送方可以连续发送的数据量,同时也受到接收方通告的窗口大小限制。同时,建议参考lwIP的文档和相关的性能调优指南,以获取更详细的配置建议和优化技巧。确保使用的硬件和驱动具有良好的兼容性和稳定性,以避免可能的问题。原创 2024-01-08 23:53:37 · 1194 阅读 · 0 评论 -
使用lwip的perf进行测速TCP会有较多的duplicate ack的原因分析
当接收方收到一系列连续的数据包时,它可能会延迟发送ACK,而是等待一定的时间间隔或接收到更多数据后再发送。确保网络环境良好,并考虑调整TCP的拥塞控制参数、延迟确认机制或其他相关配置,以优化TCP性能和减少重复确认的出现。在拥塞控制期间,发送方可能会收到重复确认,因为接收方可能已经丢弃了一些数据包或者网络延迟导致数据包到达接收方的时间不同。丢包或乱序:重复确认通常是由于网络中的数据包丢失或乱序到达引起的。当接收方收到一个乱序的数据包时,它会发送重复确认来告知发送方需要重新发送之前的数据包。原创 2024-01-08 23:48:40 · 1573 阅读 · 0 评论 -
搞不清__attribute__((aligned(n)))与__attribute__((packed))
正文大家好,我是bug菌~前段时间分享了一篇手动对齐方式设置的文章<Keil中三种手动结构体对齐方式,别用错了~>,然后有朋友私信我问到,为什么使用__attribute__((aligned(1)))进行属性声明的结构体大小不能达到__attribute__((packed))的效果,然后跟他聊了小一会,那么今天就以此文再总结总结。1默认对齐其实所谓的对齐,主要是包括两个内容,数据地...原创 2024-04-25 21:46:23 · 1088 阅读 · 0 评论 -
Keil中三种手动结构体对齐方式,别用错了~
正文大家好,我是bug菌~最近移植了一些开源组件,发现较多的语法跟编译器相关,如果没有跨平台处理,确实大大降低了程序的可移植性,其中尤为突出的就是结构体字节对齐属性的标识,通常编译器采用默认字节对齐方式,按照处理器架构的要求来决定的。比如如下结构体在stm32中默认为4字节对齐:typedefstruct_tag_Test1 { uint8_tmember1; uin...原创 2024-04-18 21:27:01 · 1349 阅读 · 1 评论 -
嵌入式实时性可以考虑静态链表~
正文大家好,我是bug菌~首先跟大家聊聊什么是静态链表,静态链表是一种使用数组来实现的链表结构。在静态链表中,数组的每个元素称为一个节点,节点中包含两部分信息:数据和指向下一个节点的“指针”,这里的指针并不是C语言里语法上的指针,它主要是标记节点在数组中的位置,也就是数组的下标索引,其实广义上也是一种指针吧。再来看下静态链表怎么玩的吧~所以与动态链表的差异点,主要是静态链表的节点在内存中是连续存...原创 2024-04-04 20:01:53 · 427 阅读 · 0 评论 -
逛完花展,bug就解了~
大家周末好,我是bug菌~今天满打满算看了一天的花展,深圳的大湾区花展还是有点看头的,人也挺多的,“人头”也没少看。但花儿艳,天气好,踏踏春挺好的~天天在办公室写代码,走上几个小时还真不一定扛得住。巧的是,上午发现一个数据异常问题,着急出门就先搁着了,在外面时不时会想着这个问题,也没个头绪,或许这也是开发人员的强迫症吧。回来后其实也摸不着头脑,因为以前测试得好好的,最近加...原创 2024-03-23 23:11:22 · 287 阅读 · 0 评论 -
什么问题最终会流到研发~
大家好,我是bug菌~看得出bug菌最近很忙,这几天确实都忙着跟同事“现场救火”,话说回来,工作也这么多年了,现场什么火没见过,只是这几天内心又多了一丝波澜,感觉“最终什么问题都会流入研发”,虽然有点绝对,但真的只有这样才能描述目前非常多研发公司的现状。测试不全面,客户现场出了问题,测试面对问题摸不着头脑,研发去~项目计划没把控好,截止日期,客户都来催着交货了,一堆功能还没开发完,都帮不上什么忙...原创 2024-04-12 20:35:19 · 225 阅读 · 0 评论 -
聊聊嵌入式开源GUI-LVGL
正文大家好,我是bug菌~最近有个项目需要用到触摸交互,所以准备选一款GUI开源库,对于一名还停留在ucGUI界面开发时代的嵌入式工作者,这段时间的对几个流行的GUI的熟悉和使用,感觉大同小异,今天先总结分享下LVGL。LVGL全名为Light and VersatileGraphics Library,直译为轻量级通用的图形库。有些朋友就该问了LVGL不是叫LittleVGL,难道我们说的不是...原创 2024-05-11 12:13:03 · 1432 阅读 · 0 评论 -
SVN的branch分支合并完要不要删除
历史记录和追溯:保留分支可以帮助团队回顾过去的工作,了解该分支的开发历史和变更记录。后续开发:有时候可能需要在已合并的分支上进行进一步的开发或修复,保留分支可以方便团队在需要时重新基于该分支进行开发。不过,如果确定某个分支完全不再需要,并且不会对未来的开发造成混淆或困扰,那么可以考虑删除该分支以保持版本库的整洁性。在删除分支之前,确保团队成员都已知悉并同意删除操作,并建议在删除前备份分支内容以防止误删。备份和恢复:保留分支作为备份可以在需要时恢复该分支的内容,以防止意外删除或丢失重要代码。原创 2024-03-24 22:09:26 · 372 阅读 · 0 评论 -
看到 "5k的工资46个工作群"我也泪目了~
大家好,我是bug菌~昨天不经意间看到了一个消息:“领着5k的工资有46个工作群”,当时我也泪目了,曾经我也深受其害~当然有些工作原本就是沟通协调,有较多的工作群也属正常,但对于一名脑力开发人员,微信里面有大把的群消息需要处理,还真没几个人吃得消。凡事都有两面性,科技同样也是一把双刃剑,像这些即时通信工具,确实能够让大家沟通更加高效,但也容易让大家陷入消息的困局。比如售前跟客户技术对接不清楚,为...原创 2024-04-30 16:17:37 · 275 阅读 · 0 评论 -
stm32h7内部flash与qspi flash异同与差异
需要注意的是,内部闪存的容量可能相对较小,可能无法满足某些应用程序对存储空间的需求。如果应用程序在QSPI闪存上执行速度变慢,而且内部闪存可用且足够容纳应用程序,将应用程序放在内部闪存中可能是一个更好的选择。因此,在选择应用程序的存储位置时,需要综合考虑访问速度、响应时间、存储容量、系统复杂性、安全性和成本等因素,以满足特定应用的需求和优化设计。容量:QSPI闪存通常具有较大的容量,可以提供更大的存储空间。访问速度:内部闪存通常具有更快的访问速度,可以更快地加载指令和数据,从而提高应用程序的执行性能。原创 2024-01-21 15:45:09 · 777 阅读 · 0 评论 -
stm32h7中RTC的BCD模式与BIN模式
在RTC中,BCD格式常用于表示日期和时间的各个数位,例如年份、月份、日期、小时、分钟和秒。BCD格式可以更直接地表示日期和时间等需要以十进制形式呈现的数值,而BIN格式更适合于数值计算和算术操作。在RTC中,通常使用BCD格式来表示日期和时间的各个数位,以方便人们读取和理解。然而,在进行数值计算和处理时,可能需要将BCD格式的数据转换为BIN格式进行操作,然后再转换回BCD格式以进行显示和存储。最后,通过将十位数左移4位(放入BCD值的高4位),再与个位数相或,得到转换后的BCD格式值。原创 2024-01-21 15:34:48 · 1157 阅读 · 0 评论 -
stm32的FMC数据访问与突发模式
配置外部存储器的宽度为 16 位, FMC 将使用内部的 ADDR[25:1]地址来作为对外部存储器的寻址地址 FMC_A[24:0],这段描述是在解释在STM32的FMC(Flexible Memory Controller)中,如何配置外部存储器的宽度为16位时,FMC使用内部的ADDR[25:1]地址作为对外部存储器的寻址,而FMC_A[24:0]用作外部存储器的地址线。在增量突发模式下,FMC首先传输起始地址对应的数据字,然后自动增加地址并传输下一个数据字,直到传输指定长度的数据字为止。原创 2024-01-10 00:36:40 · 771 阅读 · 0 评论 -
STM32的FMC独立管理和控制外部存储器
总结起来,STM32的FMC允许每个片选下的存储器空间配置是独立的,这意味着每个片选都有自己的配置寄存器,用于定义和控制与该片选相关的存储器设备。寄存器独立性:FMC提供了一组专门的寄存器,用于配置每个片选下的存储器设备。这些寄存器包括配置寄存器、计时寄存器、数据寄存器等等。每个片选都有自己的一组寄存器,用于存储与其相关的配置信息,这些寄存器互不影响。在FMC中,每个片选(Chip Select)下的存储器空间配置是独立的,这意味着每个片选都有自己的配置寄存器,用于定义和控制与该片选相关的存储器设备。原创 2024-01-09 23:30:39 · 866 阅读 · 0 评论 -
stm32的规则采样与注入采样的理解
注入采样的特点是可以在规则采样过程中的任意时刻触发,以进行额外的模数转换。在注入采样模式下,可以选择单个模拟输入通道进行采样,也可以选择多个通道进行交替采样。在注入采样模式下,可以在规则采样之外,临时触发一次模数转换,以获取特定的模拟输入信号。启动注入采样:一旦配置好注入通道和触发源,可以通过设置相关的控制寄存器来启动注入采样。注入采样的主要特点是可以在规则采样过程中的任意时刻触发,而不需要按照预定义的规则序列进行采样。需要注意的是,注入采样是一种单次的临时采样过程,与规则采样独立。原创 2024-01-09 20:21:17 · 1024 阅读 · 0 评论 -
写回(write back)与 写分配(write allocate)的差异
写回是一种缓存策略,它延迟将修改后的数据写入主存。当发生写入操作时,修改的数据首先被写入缓存中。相应的缓存行被标记为“脏”,表示已经被修改。写操作在此时被视为完成,处理器可以继续执行其他操作。实际的写入主存操作会在之后的某个时刻进行,当缓存行需要被替换或者明确要求写回时。写分配是一种分配策略,用于处理缓存的写入操作未命中的情况。当发生写入未命中时,即所请求的数据不在缓存中,写分配会将包含所请求数据的整个缓存行从主存加载到缓存中。缓存行加载完成后,写入操作在缓存中执行。原创 2023-12-29 23:23:24 · 1043 阅读 · 0 评论 -
ADC欠采样以及应用案例
因此,在音频信号处理中,可以使用较低的采样率进行欠采样,以减少数据存储和处理的要求。例如,CD音频的采样率为44.1 kHz,而人耳的最高听觉频率为20 kHz左右,因此可以使用较低的采样率对音频进行欠采样。ADC(Analog-to-Digital Converter)的欠采样是指在信号的采样过程中,采样频率低于被采样信号的最高频率的情况。需要注意的是,在应用欠采样时,需要根据具体的应用场景和信号特性进行合理的参数选择和系统设计。降低采样率:欠采样可以减少采样的数据量,缩小数据存储和处理的要求。原创 2023-12-03 19:37:52 · 905 阅读 · 0 评论 -
详解递归锁,以及递归锁与其他同步机制的区别
递归锁是一种多线程同步机制,用于解决线程在多次获取同一个锁时产生死锁的问题。在递归锁中,同一个线程可以多次获取同一个锁,而不会造成死锁。递归锁具有两个主要操作:上锁(lock)和解锁(unlock)。线程可以多次上锁,但必须相应地多次解锁才能完全释放该锁。只有当线程解锁次数与上锁次数相等时,其他线程才能获取该锁。当一个线程请求上锁时,如果锁是未上锁状态,则线程获取锁并将其状态设置为已上锁,并将上锁次数设置为1。如果同一个线程再次请求上锁,递归锁会检查当前线程是否已经持有该锁。原创 2023-12-02 19:16:51 · 1913 阅读 · 0 评论 -
中断处理程序的延迟可能导致中断标志位仍然被置位
在这种情况下,即使中断处理程序清除了中断标志位,当下一个中断事件发生时,中断标志位会再次被置位,因为前一个中断尚未完全处理。如果中断处理程序的执行时间无法缩短或需要更高的实时性,可能需要考虑使用更高级的中断处理技术,例如优先级中断、中断嵌套或使用硬件加速等方法,以确保中断能够得到及时处理并避免中断标志位被置位的问题。这是因为在中断处理程序执行期间,如果另一个中断事件发生,中断标志位会再次被置位,即使前一个中断尚未完全处理。当中断处理程序的执行时间超过了中断事件的频率时,可能出现中断标志位仍然被置位的情况。原创 2023-11-10 21:42:46 · 219 阅读 · 0 评论 -
SD卡与emmc的异同
需要根据具体的应用需求和设备要求来选择适合的存储解决方案。eMMC具有更高的性能和可靠性,适用于嵌入式系统。而SD卡具有可插拔性和更广泛的兼容性,适用于众多消费电子设备。原创 2023-10-18 23:35:46 · 3410 阅读 · 0 评论 -
SD卡与NAND flash的差异
性能限制:由于SD卡的物理尺寸和接口限制,其性能相对于直接使用NAND Flash芯片的存储解决方案可能会受到一定限制。有限的写入寿命:与普通的NAND Flash存储解决方案相比,SD卡的写入寿命可能相对较低。频繁的写入操作会逐渐降低SD卡的寿命,需要注意数据的备份和存储管理。可移动性:SD卡是一种可移动存储介质,可以轻松插入和拔出支持SD卡接口的设备,如相机、手机、笔记本电脑等。需要根据具体的应用场景和需求来评估SD卡和普通NAND Flash之间的优劣势,并选择适合的存储解决方案.原创 2023-10-18 23:26:58 · 891 阅读 · 0 评论 -
sd卡的坏块管理与负载均衡
需要注意的是,SD卡的坏块管理是由SD卡的控制器来完成的,而不是由文件系统(如FATFS)来处理。它会跟踪每个块的使用情况和擦除次数,并根据需要进行块的擦除和替换操作,以实现数据的均衡分布和存储介质的寿命延长。没错,SD卡的均衡读写功能是由SD卡的控制器实现的。SD卡控制器是SD卡内部的一个芯片,负责管理和控制SD卡的各种操作,包括数据的读取、写入、擦除以及均衡读写等功能。如果你对具体的SD卡坏块管理机制感兴趣,建议查阅相关的SD卡规格和技术文档,以了解该SD卡的具体特性和功能。原创 2023-10-18 23:17:18 · 2337 阅读 · 0 评论 -
SD卡通常是哪种类型的flash?
SD卡(Secure Digital Card)是一种存储介质,它使用的主要存储技术是闪存(Flash Memory)。因此,SD卡可以被视为一种闪存存储设备。闪存是一种非易失性存储器,它可以在断电后保持数据的完整性。与传统的随机访问存储器(RAM)不同,闪存是一种顺序访问存储器,意味着数据必须按顺序读取或写入。SD卡通常使用的是NAND Flash技术,这是一种常见的闪存类型。NAND Flash具有较高的存储密度和较低的成本,适用于大容量存储介质。原创 2023-10-18 22:58:14 · 547 阅读 · 0 评论 -
解读下SWD协议以及其应用
需要注意的是,SWD协议的详细规范和细节由ARM定义,并可能与特定的ARM Cortex微控制器有所差异。这些是SWD协议支持的一些常见调试操作。需要注意的是,SWD协议的功能和支持可能会因具体的微控制器和实现而有所差异。在实际使用时,建议参考目标设备的文档和ARM的调试接口规范,以了解特定设备和实现的支持情况。读写内存(Read/Write Memory):使用SWD协议,可以读取和写入目标设备的内存。通过选择合适的寄存器地址和操作类型(读或写),可以获取寄存器的当前值或设置寄存器的新值。原创 2023-10-15 23:02:15 · 2911 阅读 · 0 评论 -
使用winUSB进行USB开发
WinUSB是Windows操作系统提供的一种通用USB驱动程序,用于简化USB设备的开发和使用。它是一个用户模式驱动程序,可以在Windows XP及更高版本的操作系统上使用。WinUSB提供了一组API和工具,使开发人员能够与USB设备进行通信,包括数据传输和设备控制。以下是WinUSB的一些主要特点和功能:简化开发:WinUSB提供了一组易于使用的API,使开发人员能够更容易地与USB设备进行通信。它提供了基于异步I/O的数据传输接口,支持批量传输、中断传输和控制传输。原创 2023-10-15 16:08:57 · 2401 阅读 · 0 评论