tag 标签: flash

相关帖子
相关博文
  • 热度 1
    2024-7-21 15:32
    382 次阅读|
    0 个评论
    Flash BSL是指通过Bootloader(引导加载程序)对MSP430单片机的闪存进行擦除和编程的过程。这项技术尤其用于那些通过常规编程接口(如JTAG或SWD)无法正常访问的情况,例如由于固件损坏、保护位设置错误或其他编程问题导致的锁定情况。针对MSP430系列单片机,BSL提供了一种通过串口(UART)或I2C接口进行通信的备用编程方法。 要理解Flash BSL的工作方式和应用场景,需要了解MSP430单片机及其BSL功能的基本工作原理和操作步骤。MSP430单片机是德州仪器(Texas Instruments)生产的一种低功耗微控制器,广泛应用于各种嵌入式系统。BSL是这类单片机内部ROM中内嵌的一段固定代码,允许用户通过特定的通讯接口(如UART或I2C)对单片机的内部存储进行读写操作。 Flash BSL的操作通常需要以下几个步骤:首先,需要物理连接或通过开发板提供适当的接口,如USB转TTL模块连接到单片机的相应引脚。对于MSPM0G3507,可能需要将PA18引脚连接至3V3,以保证单片机能进入BSL模式。接着,使用专门的BSL烧录工具或脚本,如MSPM0_BSL_GUI.exe,该工具可以通过图形界面简化BSL烧录过程。用户需要准备正确的BSL密码,并在软件中进行配置,然后根据具体芯片型号和所需的操作选择相应的命令和固件文件进行烧录。 此过程不仅适用于解决编程错误或锁定的问题,也可以用于正常的固件升级。在产品开发和调试阶段,当需要频繁更新固件以测试新功能或修复bug时,Flash BSL提供了一个快速且安全的方法来重新编程单片机,而不需要物理接触或更换芯片。 总的来说,Flash BSL是一个针对MSP430单片机重要的编程和恢复技术,它通过BSL利用串口或I2C接口对单片机的闪存进行操作。掌握Flash BSL的使用,不仅可以帮助解决一些复杂的硬件锁定问题,还能有效加快产品的开发和调试进程。
  • 热度 4
    2023-7-16 11:45
    4460 次阅读|
    1 个评论
    半导体存储器的价格预判
    存储市场作为半导体最大的单一品类市场,同时其有具有其他半导体和被动很难拥有的金融属性,所以很多机构和个人都非常的关注:终端用户、代理商、贸易商和原厂,所以其中产生了巨大的市场分析和预测分析的空间,欧美、日本由于离开存储市场生产制造比较久远,缺乏非常详细的机构,中国台湾和中国大陆有几家非常不错的机构。 1. 集邦TrendForce :网址------内存、闪存等存储器产业价格行情_全球半导体观察丨DRAMeXchange (dramx.com)。 Trendforce 的发展主要取决于台湾DRAM产业的发展需求,也源于台湾的电子代工市场需要对存储器产生的巨大需求。 该机构对于期货价格,颗粒价格,Wafer价格的汇总分析更有参考价值,对于模组厂商、代理商的用途更大。 2.中国IC交易网:网址-----中国IC交易网 (dram.com.cn), 是国内主要从事存储和IC交易的三方信息平台,中间有很多 模组厂商的交易信息和价格,主要用于三方立即进入交易的价格信息和短期趋势。 3.CFM闪存市场:网址----CFM闪存市场 (chinaflashmarket.com),是国内领先的存储产品信息研究市场机构,随着中国 大陆对存储的巨大需求,也取得非常长远的进步,其价格信息主要是期货市场价格,而宏观走势。 4.深圳闪德资讯:网址-----首页-闪存 固态硬盘 内存 SSD DRAM SATA NVMe USB OEM PCBA存储最新资讯 - 闪德资讯 (0101ssd.com) 同时国内很多券商包括中泰证券,中信建投,中信证券都有存储分析师,都会对存储的市场和价格趋势进行行研分析,主要着眼于宏观走势、期货市场和大的关键事件进行研讨。 由于市场分析信息太多,同样来自不同利益群体的人,比如模组厂的CEO、颗粒原厂的高管甚至终端厂商的高管都会发出不同的声音。如何判断获取市场的真实声音,必须要综合分析:包括供应--原厂的产能和库存;渠道的库存;终端的库存;同样包括需求---终端厂商的需求,来自手机和消费、服务器和汽车等。而且单一企业,比如台湾模组厂喊话说市场即将复苏,更多是给自家企业股价打气,而非市场真实走势。 因为本人在企业级终端市场从事sourcing 工作多年,所以从终端厂商的角度来看怎样分析和利用复杂信息。 1.大型主流OEM厂商 大型OEM比如华为、联想、浪潮、小米、OV、H3C等等。 大型OEM主要是采取总量框架采购,通过预测滚动向原厂争取直供,通过批量获取更好的价格。 一般都会三供同时供货,60%;30%;10%或者其他份额比例,根据价格走势和供货产能情况调整短期采购对象。 同样会依据市场的需求,采取订单推迟和取消等采购行为。 整体来看,大OEM的采购其实固定,可以调整的空间比较少,大部分是通过原厂调价信息、代理涨价信息等等渠道进行战略储备和策略采购,其实更多是按部就班的进行采购执行。 基本上,大致把握好市场的走势,同原厂保持好紧密联系,避免被原厂和代理坑了就基本上可以在供应端稳定住。 关键的是对客户需求的把握,但是大公司都是销售端去把控,销售端对需求的把控能力,对采购的进阶能力会造成很大的影响,所以采购的头目是否可以说服销售和企业负责人,达到最好价格最好策略的比较关键。 同样,大OEM是基本上不用来源不明的渠道货,除去对质量的考量,同样是AVL和高严准入制的供应商引入也是巨大的屏障,当然有没有什么其他供应商利益关系就不多说了。 大厂对于期货价格信息还是比较敢兴趣的,当然大厂也有更为通畅的原厂和代理信息渠道。 2.渠道终端厂商 除了大型OEM,在市场上很多中小的OEM厂商,大部分厂商是主要是通过短周期的现货,同时配合部分的代理商订货的模式,满足客户的需求。 由于存储的价格波动频繁,所以对于现货的价格信息把控难度远远超越了大OEM。 终端需要对产品有着更为敏感的价格嗅觉,因为主要的供货渠道,现货商就是天生的价格猎人,所以长期在现货市场从事买卖赚取差价的供应商更加难以去揣摩和分析。 首先,采购要明白期货价格,一般代理的价格一个季度最快也是一个月更新一次,相对来说,获取最新的代理价格也是非常困难的事情,可以依据季度初价格去比较。 其次,采购要明白市场上的库存情况,这个很关键,比如浪潮、华为等OEM库存高企的时候会抛货到市场,会导致市场的价格出现变化,如何知道市场抛货信息,也是采购的基本要求。 再次,来自海外三星渠道的货,这个信息相对更加隐蔽,也是很多贸易商和分销商的看家的信息,如果没有长期交易的现货伙伴,很难了解到相关真实信息。 最后,需要了解原厂对渠道的管理政策,一般原厂限货,很多现货商拿不到货,也会导致价格临时上涨,当然长远价格趋势是宏观和品类需求走势。 当然wafer,颗粒和期货价格对短期成交价格没有影响,但是可以参考一下,判断中国台湾和国内的模组价格的合理性。 现货商无疑是对市场和价格更敏锐的群体,如何获取到对终端厂商更有利的信息,如何筛选能力和意愿层次不齐的现货商,找到长期合作伙伴,并形成最优采购策略,是非常需要智慧和耐力的工作。
  • 热度 7
    2023-6-2 10:33
    684 次阅读|
    0 个评论
    干货 | 为什么RTOS系统要使用MPU?
    先说明一下,其实MPU有很多含义,我们常见的有两种: MPU: Memory Protection Unit,内存保护单元 ( 本文描述的内容 ) ; MPU: Microprocessor Unit,微处理器; 此外,可能还有人会与MPU-6050这类模块联系在一起。所以,大家不要把MPU搞混了。 为什么要使用MPU? 如果你开发的嵌入式项目,因内存溢出,或者内存故障等一些原因,造成了重大经济损失,或者造成了重大事故,你就能体会为什么要使用内存保护单元(MPU)了。 在嵌入式系统中使用内存保护单元(MPU ) 可以在开发早期及时发现因内存而导致的Bug,节省更多开发时间。 同时,在项目后期修改Bug,或者增加功能,可以减少修改文档和测试所需的时间。 也就是说,使用MPU会避免因为修改一个bug,而引起多个bug的情况(0生1,1生万物 )。 MPU如何实现内存保护? 简单来说,就是保护与当前执行的代码不相关的所有数据。 拿RTOS任务A和B来说: 任务A和B不应相互交互数据 ,但是存在一个错误,任务A可能会意外地写入任务B偶尔使用的某些数据,不会影响任务A的正确操作。但是,当任务B尝试使用损坏的数据时,任务B可能会意外故障。 如果没有配置MPU来阻止任务A写入任务B的数据,则该错误可能需要很长的时间供开发人员跟踪。如果错误很小,或者如果任务B很少使用该数据,则将很难解决该bug。但是,如果使用了MPU,则该bug就会及早被发现。 在某些体系结构上,MPU甚至可以帮助你检测NULL指针引用,因为你可以设置MPU区域以防止非特权代码访问内存0x0。 应用程序中一组设计良好的MPU区域可以很好的保护重要的内存区域,以防止出现特定的问题。 一个很好的例子是通过在MPU区域的末尾放置缓冲区来防止缓冲区溢出,你还可以将任务堆栈放置在任何非特权代码都无法访问的区域。如果这样做,则每个任务必须使用自己的MPU区域之一来设置自己对自己的堆栈的访问权限。 使用MPU的好处 无论是操作系统,还是裸机系统,如果没有防止恶意访问错误内存的能力,系统将有重大安全问题,以及安全漏洞的雷区。 使用的内存保护单元(MPU)有很多优势,MPU通常允许你以特权或非特权模式运行,并使用一组“区域”来确定当前正在执行的代码是否具有访问代码和数据的权限。 每个区域都是一个连续的内存块,具有该内存的一组权限,特权和非特权访问。与非特权代码的子集相比,特权代码往往可以访问大部分(但不是全部)内存。 在整个系统运行时中,这些区域不必相同。MPU区域可以根据每个任务进行修改,每个任务可以具有自己独特的区域集,这些区域在任务移至运行状态时进行配置。 这使你可以仅对需要代码和数据的任务设置访问权限,利用MPU的嵌入式操作系统将在每次上下文切换期间管理每个任务的区域和特权级别。 比如设置RTOS两个任务不同的内存保护区域: 上面这张图,大家都能看懂吧?Flash和内存区域被分别设置保护。 两个全局保护区域:Flash开头、RAM开头; 在Flash中,一部分仅限任务1访问,这部分不能被任务访问;同时,在Flash另外区域,仅限任务2访问,不能被任务1访问。如果这两部分区域被对方访问,则会生成生成MPU故障。 在RAM区域,同一部分区域,一个只能被读,一个只能被写入,如果不按约定操作,同样也会生产MPU故障。 什么时候不使用MPU? 通常有两种情况可以不使用处理器上的MPU功能: 一个简单的项目 一个对性能至关重要的项目 第1个很简单:一个非常简单的应用程序基本上没必要使用MPU,反而增加了系统的复杂性。不设置内存保护,RAM和外围设备的MPU区域,你自己一眼就能找到bug。 第2个对性能要求高的项目:在上下文切换时,设置内存保护,堆栈那些操作,有可能影响系统的实时性,从而导致系统异常。这个需要结合项目实际情况考虑用,还是不用MPU功能。 关注公众号“优特美尔商城”,获取更多电子元器件知识、电路讲解、型号资料、电子资讯,欢迎留言讨论。
  • 热度 8
    2023-2-3 16:48
    753 次阅读|
    0 个评论
    一、前言 手头有一块深圳雷龙提供的贴片 CS 创世 SD NAND Flash,挂载个文件系统把玩一下。首先介绍一下使用的贴片 SD 卡,以前使用的都是拔插式的 SD 卡,下面这个样子: 深圳雷龙提供的CS创世 SD NAND Flash 如下图: 二、贴片 SD 卡介绍 深圳雷龙提供的 CS 创世 SD NAND 属于 LGA-8 封装,标准 SDIO 接口,兼容SPI/SD/eMMC接口,兼容各大MCU平台,可替代普通TF卡/SD卡,尺寸6x8mm毫米,内置SLC晶圆擦写寿命10万次,通过1万次随机掉电测试耐高低温,支持工业级温度-40°~+85°,机贴手帖都非常方便,速度级别Class10(读取速度23.5MB/S写入速度12.3MB/S)标准的SD2.0协议普通的SD卡可直接驱动。 贴片 SD 卡的使用很简单,管脚的连接方式和普通拔插的 SD 卡一致,所以我们设计硬件时按照普通 SD 的接线方式设计就行,以小熊派开发板为例子,单线 SDIO 硬件接线如下: 我使用小熊派开发板来挂载 FATFS 到雷龙这块 SD 卡上 三、配置 CubeMX 底层接口 首先使用 CubeMX 配置底层 SD 卡接口,选择单线模式,分频设置高一点,其他参数保持默认 配置完 SD 卡后开启 FATFS 的文件系统,选择挂载到 SD 卡,文件名选择 US ,buff 放到 STACK 上(注意调大栈空间) 配置完成后生成代码,cubemx 主要是以下两个初始化函数: 四、编写命令行测试代码 使用我之前移植的命令行框架,编写测试函数 void mount(char argc, char *argv) { 1) { if (!strcmp("init", &argv ])) { FRESULT ret = FR_INT_ERR; ret = f_mount(&SDFatFS, SDPath, 1); if (ret != FR_OK) { shell_printf("mount init failed! %d\r\n", ret); } else { shell_printf("mount init succ!\r\n"); } } else if (!strcmp("deinit", &argv ])) { FRESULT ret = FR_INT_ERR; ret = f_mount(NULL, "", 1); if (ret != FR_OK) { shell_printf("mount deinit failed!\r\n"); } else { shell_printf("mount deinit succ!\r\n"); } } } else { shell_printf("mount need more arguments!\r\n"); } }; void open(char argc, char *argv) { 1) { FRESULT ret = FR_INT_ERR; ret = f_open(&SDFile, &argv ], FA_READ | FA_WRITE | FA_CREATE_NEW); if (ret != FR_OK) { shell_printf("open %s failed! code: %d \r\n ", &argv ], ret); } else { shell_printf("open %s succ!\r\n", &argv ]); } } else { shell_printf("mount need more arguments!\r\n"); } }; void close(char argc, char *argv) { 1) { FRESULT ret = FR_INT_ERR; ret = f_close(&SDFile); if (ret != FR_OK) { shell_printf("close %s failed!\r\n", &argv ]); } else { shell_printf("close %s succ!\r\n", &argv ]); } } else { shell_printf("mount need more arguments!\r\n"); } }; void write(char argc, char *argv) { 1) { FRESULT ret = FR_INT_ERR; uint32_t write_num = 0; ret = f_write(&SDFile, &argv ], strlen(&argv ]), &write_num); if (ret != FR_OK) { shell_printf("write file failed!\r\n"); } else { shell_printf("write file succ!\r\n"); } } else { shell_printf("mount need more arguments!\r\n"); } }; void read(char argc, char *argv) { 1) { FRESULT ret = FR_INT_ERR; uint32_t read_num = 0; uint8_t read_buff ; ret = f_read(&SDFile, read_buff, 50, &read_num); if (ret != FR_OK) { shell_printf("read file failed! %d\r\n", ret); } else { shell_printf("read file succ!\r\n"); shell_printf("read dat: %s, read num %d\r\n", read_buff, read_num); } } else { shell_printf("mount need more arguments!\r\n"); } }; 将测试函数挂到命令行中: const static_cmd_st static_cmd[] = { {"ls", shell_ls_cmd}, {"mount", mount}, {"open", open}, {"close", close}, {"read", read}, {"write", write}, {"\0", NULL, NULL}, }; 下载代码,在命令行测试挂载以及读写函数: 读的数据有些乱码,用读卡器读出来看看: 可以看到成功写入,SD 卡挂载 FATFS 成功,命令行操作文件系统功能正常 ———————————————— 【本文转载自CSDN,作者: Top嵌入式 】   亲爱的卡友们,欢迎光临雷龙官网,如果看完文章之后还是有疑惑或不懂的地方,请联系我们,自己去理解或猜答案是件很累的事,请把最麻烦的事情交给我们来处理,术业有专攻,闻道有先后, 深圳市雷龙发展 专注存储行业13年,专业提供小容量存储解决方案。
相关资源