-
各位大佬好 :经过一周爬坑 已经将官方的demo 跑通 但是替换自己的模型时出差 提示信息也很少 不知道是哪里出问题环境 yolov5-6.0 + docker 镜像直接使用的 nvcr.io/nvidia/caffe 省的自己重新搭建caffe环境yolov5.yaml 文件另外就是将models下common.py文件按照网上的教程做了修改 如下只修改了3处 主要是将nn.silu()变为nn.relu() 其他未做处理。训练50轮后 得到pt模型执行python3 export.py --include onnx --device '0' --weights best.ptpython3 -m onnxsim best.onnx yolo.onnx下载了官方推荐的caffetoonnx项目 https://github.com/xxradon/ONNXToCaffe opset记得设置为9执行 python3 convertCaffe.py yolo.onnx yolov5s.prototxt yolov5s.caffemodel全程无任务报错 顺利生成模型重点!!! 将成功转换后的模型执行后直接报错: 网上找了好久也没有类似的问题 纠结了一天也不知道从哪里下手
-
人工智能研究实验室OpenAI在2022年11月30日发布了自然语言生成模型ChatGPT,上线两个月就已经超过一亿用户,成为了人工智能界当之无愧的超级大网红。ChatGPT凭借着自身强大的拟人化及时应答能力迅速破圈,引起了各行各业的热烈讨论。简单来说ChatGPT就是可以基于用户文本输入自动生成回答的人工智能聊天机器人。那肯定会有人说这不就是Siri嘛,虽然都是交互机器人但是两者的差别可老大了。那么ChatGPT在人机交互时为什么会有这么出色的表现?它到底会不会取代搜索引擎?90%的人真的会因为ChatGPT的出现而面临失业的危险吗?带着这些疑问我们一起来看看ChatGPT到底有哪些过人之处以及未来会给行业带来怎样的变革。
-
beautiful
-
一盏中国灯的全球物联网之旅,一个福建商人在海外智能化转型的三年。2022年依然是中国企业对“出海”热情高涨的一年。在新冠疫情还未结束、国际宏观经济形势依然动荡的当下,包括安克创新、宁德时代在内的数十家互联网、制造业企业却加大了海外市场的经营比例,网红公司Shein的千亿估值神话也还在持续,它们不断书写着华商出海的高光故事。在欧洲创业已十几年的福建商人林辅飞知道,自己也是这场大浪中的一份子。一定程度上,在过去,他已经取得了征战欧美的*个高峰。2009年,林辅飞去往欧洲创建了主营照明设备、电工配件以及小家电用品为主的家居用品公司Aigostar。凭借着闽商敢闯敢干的务实精神,同时依托中国传统制造业在供应链和制造环节的优势,Aigostar逐渐在欧洲市场站稳了脚跟:十年时间将产品卖到了超过20000家的社区直营门店,产品渗透率占到欧洲家庭日常生活品的15%左右,其中照明品类的光源产品连续两年排名西班牙和意大利总出口量*。目前Aigostar已在欧美国家设立了8家公司和8个海外实体仓库,销售市场也覆盖了西班牙、德国、英国等30多个国家,年增长率在40%,成为了欧洲市场中华商企业的佼佼者。但对于林辅飞来说,这还只是一个开始。2019年,他瞄准了新的AIoT赛道:让Aigostar升级为一家国际化的智能家居科技公司。仅用了3年,Aigostar的智能照明和电工产品就坐上了亚马逊平台热销榜,其中智能球泡、智能灯丝灯等细分产品占据热销榜bestseller榜单前3位。“Aigostar要成为中国智造,而不仅仅是中国制造的参与者。”林辅飞说,他希望把Aigostar的智能产品卖到全球。但从传统企业转型为智能化科技企业,并不是一件易事。不得不做的二次创业在欧洲市场,跟Aigostar的同类照明类家居用品公司中,大多数公司都具有百年历史,品牌影响力度更大,也更受消费者追捧。竞争对手虽然强势,对应的是市场也在不断变化。2019年,物联网、5G等技术开始以家庭为应用场景落地,欧洲出现照明和家居智能化高速发展的趋势,越来越多的品牌方瞄准了物联网这个弯道超车的机会。传统企业想做物联网,常会面临一个难题。由于企业并没有相关领域的人才和技术积累,从头开始往往投入大、难度高,也会拖慢抢占市场的时间。为了提速,Aigostar决定寻求外部合作者,但有一个合作的原则,是希望公司能深度参与产品智能化升级的研发和落地,在技术上留下沉淀。2018年开始,Aigostar接触起了众多解决方案提供商,但发现大部分技术供应商偏向于提供标准且同质化的全套解决方案。“这有悖于我的想法。”在林辅飞看来,这样的合作使得品牌的位置比较被动,毕竟拿到一个合作方提供的集成成熟方案,往往导致公司在细分品类的研发上缺失参与度。而实际上,直接面向消费者的品牌方更具有深度的运营思路和交互想法,也更懂消费者想要什么样的产品。事实上,Aigostar的主力市场——欧洲对于智能产品的需求较为复杂,从家庭落地应用场景来看,大多数欧洲家庭居住以别墅为主,且日常生活中更喜欢聚会等多人的娱乐活动。这样的居住环境和生活习惯,倒逼智能产品品牌商需要具备全屋智能产品解决方案的能力,而非是单个产品对于智能化反应的灵敏度。“比如意大利、西班牙人很喜欢开家庭派对,氛围灯带是一款很受欢迎的产品。”林辅飞认为,“如果将这种普通家庭渗透率极高的氛围灯带变得智能化,让灯光颜色和效果可以随着音乐变化,就非常贴合欧洲人的生活场景。”然而,由于要串联其他家庭电器,一个看似简单的氛围灯带应用,却对物联网组网的稳定性是极大的考验。过去的技术往往只能支撑单个产品的智能化,没有办法组合使用,而组网技术标准直接决定着物联网产品连接、控制、响应等多方面的能力,这样的技术难度,对于传统企业而言,无疑是二次创业。与此同时,一些中国科技公司也开始向外寻求增长机遇。2019年,阿里巴巴物联网业务试水出海。天猫精灵AIoT出海方案架构师阎霁宏向猎云网透露,在出海最初,阿里主要聚焦在完成全球基础设施,网络优化和安全合规的能力布局,但基本方向是一直比较确定的,就是通过智能互联业务中的AI品牌“天猫精灵”沉淀的交互系统AliGenie、芯片,再联合阿里云覆盖全球200多个国家部署的数据中心组成一套“云+芯”方案,主要向中国出海企业和海外企业提供更聚焦技术本身的物联网服务。截至目前,阿里智能互联和“猫芯”已完成覆盖200多个国家、24种语言,全球3000多个加速节点的基础网络建设。2021年年底,智能互联在阿里巴巴内部升级为一级业务,意味着集团给了其更大资源调配的权限。阎霁宏表示,“云+芯”方案已经低调验证3年,未来还将加大持续投入的力度,“下一阶段,拥抱兼容跨系统跨平台连接和控制协议,如Matter协议是行业的一个大趋势;二是会加强和速卖通、Lazada等阿里海外商业板块合作,为伙伴提供全周期服务。”相较于市场上其他同质化的方案,阿里的云和芯片解决方案更为开放和聚焦,让品牌方拥有自主研发权。也是这个特性,让Aigostar和阿里建立了合作。阎霁宏也表示:“头部品牌和中长尾客户的需求不同,更希望有差异化的产品能力保持产品溢价,避免陷入价格竞争,将研发定制自主权还给品牌,也是提升品牌的差异竞争,助力品牌沉淀更多技术和市场。”站在风口上,Aigostar开始了物联网全球化高速发展的旅程,也*次深入了解到物联网这片深海。在国际上,物联网组网的技术标准非常多样,常见的包括ZigBee、6LowPAN等。而每一家物联网企业都试图在体验上获得核心突破。Aigostar决定用照明产品进行主力研发。每个月,早已在西班牙定居的林辅飞都要飞回福建亲自参与产品研发的过程,由于阿里从2017年开始就在蓝牙Mesh等技术上建立更快、更便捷的连接标准,近年来,这项技术已经推进到不同行业中进行大规模应用落地,而灯带灯照明产品属于试行较为成功的品类,已经可以让消费者体验到无感的连接体验,让智能产品买回家后不用花太多时间安装,连接速度控制在了100毫秒以内。这让安装了“猫芯”的氛围灯带也由此诞生。而这款产品在国外几乎没有竞争者。解决方案不止在技术事实上,技术*优势并不是Aigostar选择牵手阿里智能互联的*原因,从品牌方来看,传统照明类产品的生产,可能只涉及到几个环节,但生产出一个可交互的智能照明产品,往往需要涉及几十个环节。生产链条的拉长,意味着更高的投入成本。如今全球疫情反扑,经济动荡,出海各环节都面临着涨价的窘境。智能化成本去年也因为原料涨价提高20-30%,进一步压缩了品牌的利润空间。在这样的背景条件下,品牌方可能无力再投入更高的制造成本。换言之,降本增效是如今品牌出海的关键词之一,也是品牌方较为看重的维度。基于阿里智能互联“猫芯”的降本,产品售价直接降低三分之二,有利于智能化产品进一步抢占市场份额。据猎云网了解到,阿里智能互联的解决方案,能让产品研发上市效率提高60%,单件芯片模组成本降低35-50%。这样的降本空间,不仅仅是利好品牌自身的制造成本,甚至已经直接反映到产品价格上。之前一款智能照明的产品售价在7-8欧元,新产品已经能做到售价为2-3欧元。降价后的价格和传统照明产品价格相差无几。另外,一些创新场景也超出了双方合作的初期预想。起初,Aigostar的照明产品基本以家庭为落地应用场景,基于阿里第三代芯片模型组的升级,Aigostar的产品可以应用到商场等B端商业空间中。从2019年开始做全球激活中心,先从Wi-Fi方案入手,然后加入蓝牙能力,再到如今蓝牙MESH的解决方案,这套“云+芯”的物联网方案可以使得产品搭载百余个设备。在物联网时代,技术的革新往往起着非常重要的影响作用。底层技术的迭代,不仅能助力品牌扩宽产品应用场景,在消费者层面也获得了良好的反馈。如今,欧洲消费者更趋向于链接更快,操作简单的产品。合作3年来,Aigostar在欧洲的主流市场已有数百万智能产品全量使用阿里“云+芯”方案,未来2年,随着更多产品应用领域的合作,双方合作智能产品出海数量预计将成倍上升。预计未来两三年智能产品的销售额将占到总销售额的半数。而在与阿里合作后,Aigostar也成立了由嵌入式工程师、.Net前后端软件开发工程师以及电子工程师、结构工程师等近50人组成的智能专项团队。这不仅是一个传统企业转型的过程,也是企业自身学习的过程。舞台才刚拉开帷幕这是一个和过去不同的时代。回想20年前,中国企业随着WTO而按下了全球化的加速键,当时出海的身影中还多是海尔、TCL为代表的的大型制造企业。而随着中国制造业升级,越来越多中小企业也有了出海的底气,或者直接在国外建立公司,并改变了国货等同于“物美价廉”的刻板印象。为了支持这众多的产品实现智能化转型升级,芯片模组公司也发展迅速,但国外外强内弱的格局已经扭转。根据Counterpoint数据显示,2015年以Telit、Sierra Wireless、Thales、U-blox为首的海外模组厂商占据全球65%出货量份额。2020年,上述四家海外厂商的份额收缩至16%,而中国厂商份额提升至60%以上。不过,出海进程中的风险不容忽视。由于技术发展周期等问题,目前全球物联网进展依然受到产品创新、国际政治经济环境等因素的影响,急于寻求下一个技术增长点。从目前来看,云平台有望成为新的物联网争夺焦点。“大约2017年、2018年,中国企业迎来了出海的质变时刻,创新实力和技术已经相当成熟,有些企业甚至可以赶超海外对手。”移远通信CEO钱鹏鹤曾表示海外市场愈发相信中国制造的能力。A股首家上市的无线通信模组企业广和通,也感受到了物联网出海的红利,广和通CEO应凌鹏曾表示,目前广和通的全球客户已达4000余家,业务覆盖100多个国家和地区。广和通推动自身产品出海的同时,也在帮助更多合作伙伴出海。
-
为了找到始终如一地产生新材料最佳打印质量的最佳参数,专业操作人员经常需要进行人工试错实验,有时创建数千张打印。打印速度和打印机沉积的材料量是其中的一些变量。尽管科学家和工程师们正在不断地创造可用于3D打印的具有特殊品质的新材料,但这可能是一项具有挑战性且成本高昂的任务。为了找到始终如一地产生新材料最佳打印质量的最佳参数,专业操作人员经常需要进行人工试错实验,有时创建数千张打印。打印速度和打印机沉积的材料量是其中的一些变量。现在,麻省理工学院的研究人员利用AI来简化这一过程。他们开发了一种ML系统,使用计算机视觉来监控生产过程,并实时修复处理错误。在使用模拟训练神经网络如何更改打印参数以减少错误后,他们将控制器放在真正的3D打印机上。这项工作避免了打印数万或数亿实际对象来教授神经网络的过程。此外,这可能使工程师更容易在其设计中加入新颖的材料,使之能够创造出具有独特的化学或电气特性的产品。如果在设置或正在打印的材料发生意外变化,这也可能使技术人员更容易对打印过程进行快速调整。由于涉及大量的试验和错误,为数字化制造方法选择最佳参数可能是过程中最昂贵的步骤之一。此外,一旦技术人员发现功能良好的组合,这些参数仅在该特定情况下是最佳的。因为其缺乏关于该物质如何在各种环境、各种装备上发挥作用或新批次是否具有不同特征的信息。此外,使用ML系统也存在困难。研究人员必须首先对打印机上发生的事情进行实时测量。为此,他们开发了一个机器视觉装置,两个摄像头指向3D打印机的喷嘴。该技术在材料沉积时对其进行照明,并根据通过的光量确定材料的厚度。要训练基于神经网络的控制器来理解这个制造过程,需要进行数百万次打印,这是一个数据密集型操作。他们的控制器使用一种被称为强化学习的方法进行训练,这种方法通过在模型出错时付费来教育模型。该模型需要选择可以在虚拟环境中生成特定对象的打印参数。当模型在给定预测结果后,选取的参数使其打印结果与预期结果之间的方差最小即可获得。在这种情况下,“错误”意味着模型要么分配了过多的材料,填充了应该保持空白的空间;要么没有足够的材料,留下了需要填充的空间。然而,现实世界比模型还要粗糙。实际上,条件通常会因微小的波动或印刷过程噪声而改变。研究人员利用这种方法来模拟噪声,从而产生更准确的结果。当对控制器进行测试时,这比他们检查的任何其他控制策略都更精确地打印出物体。其在打印填充材料时尤其有效,这涉及到打印物体的内部。研究人员的控制器改变了打印路径,使物体保持水平,而其他一些控制器放置了大量材料,使打印的物体会向上突出。即使在材料沉积之后,控制策略也可以了解其如何分散和适应参数。研究人员打算为其他制造过程创建控制,现在他们已经证明了这种方法在3D打印中的效率。他们还想研究如何改变策略,以适应有多个材料层或各种材料同时生产的情况。此外,他们的方法假设每种材料都有恒定的粘度,但以后的版本可能会使用AI实时检测和计算粘度。责任编辑:姜华 来源: 千家网
-
随着5G、云计算、区块链、大数据和人工智能等数字化技术在商业和生活中被广泛应用,数据资源逐渐成为企业生产经营的重要资产,企业经营进入了一个全新的数字化时代。在数字化时代,各行各业都被重新定义,新兴行业崭露头角,“降维打击”在商业竞争中无处不在,传统行业面临着全新的挑战。如何抓住数字化时代的红利和机遇并应对随之而来的焦虑,是企业亟待思考的问题。数字化转型是制造企业未来发展的必由之路现阶段制造企业面临着时代的巨大挑战, “改变的市场”“变化的价值链”都在催促企业尽快提升核心竞争力。而这,正是数字化转型的目标。企业的核心竞争力,从工业制造的角度来看,包括产品质量、价值与价格,从用户的角度来看有两点——个性化需求和快速响应。其中,个性化需求也就是柔性制造,比如我在电商平台看到一款想要的商品,但商品页给出的几个规格和我的需求不符,我就会咨询客服是否可以定制,客服回复尺寸、颜色等都可以按我的要求做定制,并在5天内就能发货,这就是满足了我作为消费者的个性化需求与快速响应。制造业目前也需要做到满足个性化需求,但要做到这点,就必然要以数字化技术为基础。当下各个细分行业的企业数字化建设水平是参差不齐的,成熟度最高的是电子设备行业,目标水平是70%,平均水平为60%。其他行业就比较低,数字化转型之路任重道远。数字化转型,从单元应用到数据贯通发掘数据价值数字化转型有三个维度:价值链维度、产品维度、生产维度。把企业比作一个人的话,头脑里的念头和世界的链接,个人意愿、能力和价值的体现就是到底能做什么,这个是价值链。通过灵活的手脚和高超的技能把想法实现出来,是生产的能力。而贯穿全身的脉络,提供能量,是PLM的作用。设计环节通过CAD定义产品,产品数据通过PLM进行管理,这些数据可以向价值维度传递,提供给销售环节,帮助销售人员与客户沟通,向制造维度传递,传递给ERP、MES系统,同时也可以向后端传递,延伸到供应商、以及用于产品的运维和服务。PLM有几个核心的功能模块,EDM 产品图文档管理,管图纸、管模型、管文件,PDM产品数据管理,管编码、管物料、管BOM,以及CAPP工艺数据管理,管路线、管工艺、管定额。从企业的全价值链来看,一般情况下,先有CRM客户关系管理带来市场订单和客户需求,然后由PLM系统进行产品设计和研发,全生命周期管理,再到下游的SCM供应链管理,ERP企业资源计划、MES制造执行系统,实现从单元应用到数据贯通,全价值链打通的是“研发、生产、销售、服务”各个环节,实现系统集成,进而挖掘出数字价值,这也是现阶段大部分中小企业数字化的根本目标和核心。CAXA PLM以华为云为底座,赋能制造业研发设计和生产制造数码大方坚持自主开发,30年专注制造业工业软件深耕细作,是我国掌握核心技术的国产工业软件优秀代表,同时还是“互联网+智能制造”国家工程实验室。数码大方PLM则以华为云为底座,面向智能制造业提供一系列产品化应用模块,包括项目管理、PDM产品数据管理、BOM材料清单管理、CAPP工艺管理、以及与制造系统比如ERP、MES的集成。全面支撑企业的开发决策、产品设计、工艺设计到生产制造等主要业务场景。部署方式支持云端部署,让中小企业客户不用关心IT硬件和运维,也支持混合部署,支持集团型企业的异地管理需求。可以随着企业发展灵活地扩展、增加其他功能,企业按需购置,并确保随着业务的增长,可以快速进行PLM的扩展。集中、安全、有序、协同,赋能设计贯通智造在制造业生产销售过程中,CAXA PLM主要从4个层面,助力制造企业降本、增效、缩短周期,提高产品质量。集中|数据共享,提升设计资源利用率CAXA PLM对企业产品的图纸、技术文件、工艺卡片、更改单、标准等技术文档的通过系统集中在线管理,解决因人员流失、硬盘故障带来的资源损失,并提升产品资料的利用率,便于检索、重用和追述。安全|保护企业核心资产的安全随着企业信息化建设的推进,对数据安全管理的要求也越来越高。CAXA PLM协同管理对系统内、外的数据实施不同的安全策略进行管理:基于角色的授权模型的权限策略,基于对数据库、电子仓库加密安全管理策略等。有序|提升设计管理效率彼得·德鲁克说:“管理无非就是人和资源的事情。”清楚人才和资源两大方面的事情就可以做到有组织有科学的管理。CAXA PLM作为有序管控业务过程的管理工具,能够实现过程可视化,提升管理效率。协同|以数据为核心协作通过CAXA PLM可以实现部门内协同和部门间有效协同;快速为生产制造准备产品数据;消除信息孤岛,实现部门内和跨部门业务的贯通,贯通设计、工艺、制造过程。CAXA PLM云商店登榜,为制造企业“保驾护航”华为云云商店作为值得信赖的软件及服务交易交付平台,在云服务的生态系统中,与合作伙伴致力于为用户提供优质、便捷的基于云计算、大数据业务的软件、服务和解决方案,满足华为云用户快速上云和快速开展业务的诉求。数码大方CAXA PLM协同管理解决方案,自2019年上架华为云云商店以来,已连续服务众多制造企业,赢得良好的市场口碑,荣获2021年度华为云商店优秀合作伙伴“千万俱乐部奖”。近期还登榜了云商店半年度热销榜TOP7、半年度服务质量榜TOP4,得到了用户的充分认可。未来,数码大方将继续携手华为云云商店,全面推进制造业实现数字化转型,共同促进制造业高质量发展。编辑&撰文 | 一只大月亮
-
与许多行业一样,当前的疫情大流行对制造业产生了巨大影响。需求的减少和原材料的减少意味着许多制造企业需要在现有流程中寻找提高效率的方法。一个关键的趋势似乎受到了影响,那就是工业4.0。在疫情大流行之前,它无疑是每个人嘴边的流行语,并且实施相关技术的所有优势对每个人来说都是显而易见的。许多制造商正在权衡引入什么技术以及在什么时间引入,与许多技术流行语不同,工业4.0正在获得真正的势头,并开始对公司产生真正的影响。确实,凯捷(Capgemini)的研究发现,76%的制造商要么有一个正在进行的数字工厂计划,要么正在努力制定一个。然而,在2020年的最初几个月里,一切都发生了翻天覆地的变化。突然间,可以理解的是,在预算和技术方面出现了新的优先事项。当劳动力在家庭和办公室/仓库之间分配时,实施使企业能够继续运行的技术成为了当务之急。因此,毫不奇怪,工业4.0被许多公司抛在脑后,放在了次要位置。现在,许多公司将工业4.0视为一项支出而不是一项收益,这标志着我们从年初的水平倒退了一大步。事实上,制造商不应把它放在次要位置,而是应该寻求实施工业4.0技术来帮助他们度过这段时期,帮助他们提高效率,改善工作环境,并应对我们生活的新冠肺炎世界。毫无疑问,在过去的几个月里,我们所有人的情况都发生了很大的变化,但是制造业不应该放弃工业4.0可以提供的机会。与工业4.0相关的解决方案非常适合该行业当前面临的挑战。连接性、先进的工程、数据、分析和智能以及人机交互,都可以帮助制造企业找到真正的效率,发现其流程和供应链中的漏洞,并为客户提供全方位的更好服务。制造业面临的关键问题基本上没有改变。 他们仍然需要:成本效益:这可能比以往任何时候都更加重要,可以减少设备和IT系统的停机时间,并实现利润最大化。以客户为中心:即使在大流行期间,客户的期望值也在大幅提高。事实上,在封锁期间,数字互动的增加意味着这已经成为常态和预期。现在,制造商必须在如何为客户生产产品和服务方面变得越来越灵活和敏捷,而工业4.0对于制造商在短时间内有效地做到这一点至关重要。灵活性:灵活性现在已成为制造商的首要任务。至关重要的是,需要具有可以使“人员”从重复任务中解放出来并使他们专注于业务的其他关键领域。在我们赖以生存的大流行世界中,最大限度地利用技术和人力资源已变得非常重要。因此,制造商应将工业4.0解决方案视为其大流行恢复的关键方面,而不是将其视为一种“可有可无”的好处,即在节省成本的过程中将其搁置。事实上,这种技术的实施对现在的生存至关重要,可以使制造商更强大、更高效、更具竞争力。(编译:iothome)原文链接:https://www.iothome.com/archives/6539
-
7月25日消息,英特尔与联发科宣布建立战略伙伴关系。英特尔将通过其代工服务部门(IFS)向联发科供应芯片。英特尔表示,联发科将使用英特尔的工艺技术为一系列智能边缘设备生产芯片。联发科所制造的芯片用于亚马逊的Echo音箱和健身器材制造商Peloton Interactive。预计此次英特尔在代工业务上达成的合作,将加剧与台积电和三星电子竞争。据悉,2021年,英特尔宣布成立代工服务事业部,为其他厂商代工芯片,旨在让该公司重振其市场地位,并希望在全球芯片制造领域拥有更大的影响力。据外媒7月报道,为了建立能够与三星和台积电抗衡的晶圆代工业务,英特尔正积极从三星和台积电等竞争对手中聘请高管和资深员工。报道显示,英特尔近期招募了来自台积电的Suk Lee和Michael Chang,在英特尔的代工服务事业部 担任要职。2022年早些时候,英特尔聘用了此前在三星北美代工部门的高级副总裁和负责人Hong Hao。曾为台积电工作超过21年的Margaret Han,也被英特尔聘为该公司代工服务的全球外部制造采购和供应商管理高级总监。
-
意法半导体近期更新了NFC设计提升用户体验需要考虑的因素白皮书,新增了NFC Forum最新的导向标识系统和指引,确保终端设备用户更好地了解手机或手表的NFC触点在哪里,以及如何使用NFC功能,翻开了NFC应用故事的新篇章。新图标力争抓住群体意识,以推广普及非接触式解决方案。制造商已经是这一新行为的参与者,设备企业现在必须选择适合的图标,因为他们知道图标会影响产品寿命。因此,让我们了解一下推出新导向标识系统背后的原因,以及如何从中获得最大的利益。非接触目前还不意味着毫无阻力在当前使用体验中存在的问题NFC Forum(意法半导体是会员)于2021年6月公布了一份用户体验调查结果。体验时间过长和缺乏信息是消费者反应的两个最突出的问题。例如,只有30%的人知道自己的移动设备上的NFC触点在哪里。不幸的是,大约35%的人在最初几次使用NFC过程中遇到了麻烦,20%的人有时还是记不住NFC触点在哪里。在深入钻研消费者的回答时,NFC Forum发现,超过25%的人在寻找触点时遇到困难,因为他们要么没有相关信息,要么信息没有帮助。全球疫情蔓延进一步加剧了这一问题。随着人们避免接触硬币、纸币和操作台面,非接触式支付的人气确实显著提高。NFC刷银行卡或手机一夜之间成为一种保护健康的措施,吸引许多人开始使用这项新功能。然而,尽管有危机感,但是,有时候仍有太多人不知道NFC触点在哪里,不知道虚拟钱包除支付外还有其他用途。因此,随着世界走出疫情,NFC Forum正在抓住机会改善这种情况。非接触式革命的成功必须正视这些数字。近90%的用户,在第一次用NFC时,交易就成功了,证明使用成功率很高。此外,NFC Forum调查发现,近80%的人认为这种互动过程自然。ABI Research在2020年发表的一项研究报告发现了类似的结果,88%的受访者称体验良好。更令人鼓舞的是,分析师发现,在用过一次后,绝大多数用户几乎每天都在用这项技术,超过80%的用户在移动钱包中放了不止一张卡。简而言之,大多数消费者已经接受了NFC。NFC Forum现在正在寻求帮助那些有具体实际问题的人。新的导向标识系统发布,因为非接触可以不费力简化根据调查数据,解决当前挑战的方法将来自新的图标。NFC Forum 的调查显示,35%的受访者尽管没有信息,但还是成功地找到了触点,因为他们认识一个符号。因此,该组织提出了一个新的简化版N标志。这个简版被故意加宽,以适应汽车门把手等狭窄物体。同样,手机厂商可以将其放置在产品上,而不会影响设计美观。新导向标识图标是相互交叉在一起两个英文字母N,象征两个不同物体接触,提示用户这个位置是触点。指向图标NFC Forum还在简化版本的基础上又设计了两个图标。第一个是指向图标,因为它使用箭头来引导用户。这个图标设计非常抢眼,使用同心波来吸引消费者的眼睛,同时留下无线交互的印象。在支持文档中,NFC Forum预计这个图标的应用范围最广,将会出现在各种产品上。酒店可以把它放在门上,商店可以把它印在价签上,制造商可以把它印在包装上,就举这个几个例子。指向图标并不暗示支付,没有倾向性,代表了论坛将NFC技术扩展到更多使用场景的愿望。充电图标虽然想要覆盖更多的应用场景,但是还创建了一个无线充电专用图标。充电图像与简化版本几乎相同,只是顶部多了一个雷电标志。这个图标仅适用于充电器外壳,以避免混淆用途,所以设计的非常简约,没有指向图标上的波浪,这意味这个图标被限定用于重要使用场景。NFC Forum知道,许多人仍然难以理解无线充电。消费者并不总是知道设备是否支持无线充电,以及在哪里充电。NFC Forum希望这个专用图标让无线充电变得更加普及。教育图标新的导向标识系统中的最后一个图标是教育图标,它描绘的是一只手将手机放在简化或指向图标上。顾名思义,这个图标是向新手用户讲解NFC交互功能。该标志是图标中尺寸最大的,用于通常无非接触式交互功能的产品。NFC Forum根据调查结果,用这个图标帮助不太熟悉NFC的人群了解该技术。教育图标也用到了简化图标和指向图标,作为与消费者沟通的桥梁。随着人们对这项技术越来越熟悉,制造商将能够从教育图标切换到简化图标或指向图标。更好的用户体验意味着需要更好的技术教育NFC Forum正在尽可能降低新的导向标识系统的应用阻力。图标的使用不与认证过程挂钩,因为NFC Forum希望NFC尽快实现大众化。然而,只有教育产品制造商和公众,才能实现这个目标。维也纳的研究人员进行的一项研究表明,NFC支付受阻是因为“在用户当中流传着几个迷思概念”,作者提出,“NFC在适用性和用户体验方面仍有改进的空间”。同样,2019年发表的另一篇论文显示,视觉反馈在改善NFC支付终端交互方面发挥了关键作用2。因此,NFC大众化迫切需要对制造符合NFC标准的产品的厂商和公众进行更好的教育,正是因为这个原因,意法半导体不只提供芯片和开发工具,帮助制造企业在新产品中采用NFC技术,例如,第一款支持NFC的香水。我们还想在用户体验、NFC触点、技术内部工作原理、移动设备如何使用NFC,以及如何打造一个成功的应用等重要方面教育合作伙伴。转载自https://iot.ofweek.com/2022-08/ART-132200-8300-30570532.html
-
# 一、环境介绍 **编程软件:** keil5 **操作系统:** win10 **MCU型号:** STM32F103ZET6 **STM32编程方式:** 寄存器开发 (方便程序移植到其他单片机) **SPI总线:** STM32本身支持SPI硬件时序,本文示例代码里同时采用模拟时序和硬件时序两种方式读写W25Q64。 模拟时序更加方便移植到其他单片机,更加方便学习理解SPI时序,通用性更高,不分MCU; 硬件时序效率更高,每个MCU配置方法不同,依赖MCU硬件本身支持。 **存储器件:** 采用华邦W25Q64 flash存储芯片。 W25Q64这类似的Flash存储芯片在单片机里、嵌入式系统里还是比较常见,可以用来存储图片数据、字库数据、音频数据、保存设备运行日志文件等。 # 二、华邦W25Q64介绍(FLASH存储类型) ## 2.1 W25Q64芯片功能介绍 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/3/1659491234258425773.png) W25Q64是为系统提供一个最小空间、最少引脚,最低功耗的串行Flash存储器,25Q系列比普通的串行Flash存储器更灵活,性能更优越。 W25Q64支持双倍/四倍的SPI,可以储存包括声音、文本、图片和其他数据;芯片支持的工作电压 2.7V 到 3.6V,正常工作时电流小于5mA,掉电时低于1uA,所有芯片提供标准的封装。 W25Q64的内存空间结构: 一页256字节,4K(4096 字节)为一个扇区,16个扇区为1块,容量为8M字节,共有128个块,2048 个扇区。 W25Q64每页大小由256字节组成,每页的256字节用一次页编程指令即可完成。 擦除指令分别支持: 16页(1个扇区)、128页、256页、全片擦除。 W25Q64支持标准串行外围接口(SPI),和高速的双倍/四倍输出,双倍/四倍用的引脚:串行时钟、片选端、串行数据 I/O0(DI)、I/O1(DO)、I/O2(WP)和 I/O3(HOLD)。 SPI 最高支持 80MHz,当用快读双倍/四倍指令时,相当于双倍输出时最高速率160MHz,四倍输出时最高速率 320MHz。这个传输速率比得上8位和16位的并行Flash存储器。 W25Q64支持 JEDEC 标准,具有唯一的 64 位识别序列号,方便区别芯片型号。 ## 2.2 W25Q64芯片特性详细介绍 **●SPI串行存储器系列** -W25Q64:64M 位/8M 字节 -W25Q16:16M 位/2M 字节 -W25Q32:32M 位/4M 字节 -每 256 字节可编程页 ## 2.3 引脚介绍 下面只介绍W25Q64标准SPI接口,因为目前开发板上的封装使用的就是标准SPI接口。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/3/1659491248542222859.png) | **引脚编号** | **引脚名称** | **I/O** | **功能** | | ------------ | ------------ | ------- | ----------------------------------- | | **1** | **/CS** | **I** | **片选端输入** | | **2** | **DO(IO1)** | **I/O** | **数据输出(数据输入输出 1)\*1** | | **3** | **/WP(IO2)** | **I/O** | **写保护输入(数据输入输出 2)\*2** | | **4** | **GND** | | **地** | | **5** | **DI(IO0)** | **I/O** | **数据输入(数据输入输出 0)\*1** | | **6** | **CLK** | **I** | **串行时钟输入** | | ----- | -------------- | ------- | ----------------------------------- | | **7** | **/HOLD(IO3)** | **I/O** | **保持端输入(数据输入输出 3)\*2** | | **8** | **VCC** | | **电源** | ### **2.2.1 SPI片选(/CS)引脚用于使能和禁止芯片操作** CS引脚是W25Q64的片选引脚,用于选中芯片;当CS为高电平时,芯片未被选择,串行数据输出(DO、IO0、IO1、IO2 和 IO3)引脚为高阻态。未被选择时,芯片处于待机状态下的低功耗,除非芯片内部在擦除、编程。当/CS 变成低电平,芯片功耗将增长到正常工作,能够从芯片读写数据。上电后, 在接收新的指令前,/CS 必须由高变为低电平。上电后,/CS 必须上升到 VCC,在/CS 接上拉电阻可以完成这个操作。 ### 2.2.2 串行数据输入、输出和 IOs(DI、DO 和 IO0、IO1、IO2、IO3) W25Q64、W25Q16 和 W25Q32 支持标准 SPI、双倍 SPI 和四倍 SPI。 标准的 SPI 传输用单向的 DI(输入)引脚连续的写命令、地址或者数据在串行时钟(CLK)的上升沿时写入到芯片内。 标准的SPI 用单向的 DO(输出)在 CLK 的下降沿从芯片内读出数据或状态。 ### 2.2.3 写保护(/WP) 写保护引脚(/WP)用来保护状态寄存器。和状态寄存器的块保护位(SEC、TB、BP2、BP1 和BP0)和状态寄存器保护位(SRP)对存储器进行一部分或者全部的硬件保护。/WP 引脚低电平有效。当状态寄存器 2 的 QE 位被置位了,/WP 引脚(硬件写保护)的功能不可用。 ### 2.2.4 保持端(/HOLD) 当/HOLD 引脚是有效时,允许芯片暂停工作。在/CS 为低电平时,当/HOLD 变为低电平,DO 引脚将变为高阻态,在 DI 和 CLK 引脚上的信号将无效。当/HOLD 变为高电平,芯片恢复工作。/HOLD 功能用在当有多个设备共享同一 SPI 总线时。/HOLD 引脚低电平有效。当状态寄存器 2 的 QE 位被置位了,/ HOLD 引脚的功能不可用。 ### 2.2.5 串行时钟(CLK) 串行时钟输入引脚为串行输入和输出操作提供时序。(见 SPI 操作)。 设备数据传输是从高位开始,数据传输的格式为 8bit,数据采样从第二个时间边沿开始,空闲状态时,时钟线 clk 为高电平。 ## 2.3 内部结构框架图 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/3/1659491308969766341.png) ## 2.4 W25Q64的标准SPI操作流程 W25Q64标准SPI总线接口包含四个信号: **串行时钟(CLK)、片选端(/CS)、串行数据输入(DI)和串行数据输出(DO)**。 DI输入引脚在CLK的上升沿连续写命令、地址或数据到芯片内。 DO输出引脚在CLK的下降沿从芯片内读出数据或状态。 W25Q64分别支持SPI总线工作模式0和工作模式3。模式0和模式3的主要区别在于常态时的CLK信号不同;对于模式0来说,当SPI主机已准备好数据还没传输到串行Flash中时,CLK信号常态为低; **设备数据传输是从高位开始,数据传输的格式为8bit,数据采样从第二个时间边沿开始,空闲状态时,时钟线clk为高电平**。 ## 2.5 部分控制和状态寄存器介绍 ### 2.5.1 W25Q64的指令表 | 指令名称 | 字节 1 (代码) | 字节 2 | 字节 3 | 字节 4 | 字节 5 | 字节 6 | | -------------- | --------------------------- | ------------- | -------- | ------ | ------------ | ------ | | 写使能 | 06h | write_enabled | | | | | | 禁止写 | 04h | | | | | | | 读状态寄存器 1 | 05h | (S7-S0)(2) | | | | | | 读状态寄存器 2 | 35h | (S15-S8)(2) | | | | | | 写状态寄存器 | 01h | (S7-S0) | (S15-S8) | | | | | 页编程 | 02h | A23-A16 | A15-A8 | A7-A0 | (D7-D0) | | | 四倍页编程 | 32h | A23-A16 | A15-A8 | A7-A0 | (D7-D0,…)(3) | | | 块擦除(64KB) | D8h | A23-A16 | A15-A8 | A7-A0 | | | | 块擦除(32KB) | 52h | A23-A16 | A15-A8 | A7-A0 | | | | 扇区擦除(4KB) | 20h | A23-A16 | A15-A8 | A7-A0 | | | | 全片擦除 | C7h/60h | | | | | | | 暂停擦除 | 75h | | | | | | | 恢复擦除 | 7Ah | | | | | | | 掉电模式 | B9h | | | | | | | 高性能模式 | A3h | | | | | | ### 2.5.2 读状态寄存器1 状态寄存器1的内部结构如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/3/1659491331053766971.png) 状态寄存器1的S0位是当前W25Q64的忙状态;为1的时候表示设备正在执行程序(可能是在擦除芯片)或写状态寄存器指令,这个时候设备将忽略传来的指令, 除了读状态寄存器和擦除暂停指令外,其他写指令或写状态指令都无效, 当 S0 为 0 状态时指示设备已经执行完毕,可以进行下一步操作。 **读状态寄存器1的时序如下:** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/3/1659491348140406138.png) 读取状态寄存器的指令是 8 位的指令。发送指令之前,先将/CS 拉低,再发送指令码“05 h” 或者“35h”。设备收到读取状态寄存器的指令后,将状态信息(高位)依次移位发送出去,读出的状态信息,最低位为 1 代表忙,最低位为 0 代表可以操作,状态信息读取完毕,将片选线拉高。 读状态寄存器指令可以使用在任何时候,即使程序在擦除的过程中或者写状态寄存器周期正在进行中。这可以检测忙碌状态来确定周期是否完成,以确定设备是否可以接受另一个指令。 ### 2.5.3 读制造商ID和芯片ID 时序图如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/3/1659491360975670153.png) 读取制造商/设备 ID 指令可以读取制造商 ID 和特定的设备 ID。读取之前,拉低 CS 片选信号,接着发送指令代码“90h” ,紧随其后的是一个 24 位地址(A23-A0)000000h。 设备收到指令之后,会发出华邦电子制造商 ID(EFh) 和设备ID(w25q64 为 16h)。如果 24 位地址设置为 000001h ,设备 ID 会先发出,然后跟着制造商 ID。制造商和设备ID可以连续读取。完成指令后,片选信号/ CS 拉高。 ### 2.5.4 全片擦除(C7h/60h) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/3/1659491377737108557.png) 全芯片擦除指令,可以将整个芯片的所有内存数据擦除,恢复到 0XFF 状态。写入全芯片擦除指令之前必须执行设备写使能(发送设备写使能指令 0x06),并判断状态寄存器(状态寄存器位最低位必须等于 0 才能操作)。发送全芯片擦除指令前,先拉低/ CS,接着发送擦除指令码”C7h”或者是”60h”, 指令码发送完毕后,拉高片选线 CS/,,并判断状态位,等待擦除结束。全片擦除指令尽量少用,擦除会缩短设备的寿命。 ### 2.5.5 读数据(03h) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/3/1659491390334216182.png) 读取数据指令允许按顺序读取一个字节的内存数据。当片选 CS/拉低之后,紧随其后是一个 24 位的地址(A23-A0)(需要发送 3 次,每次 8 个字节,先发高位)。芯片收到地址后,将要读的数据按字节大小转移出去,数据是先转移高位,对于单片机,时钟下降沿发送数据,上升沿接收数据。读数据时,地址会自动增加,允许连续的读取数据。这意味着读取整个内存的数据,只要用一个指令就可以读完。数据读取完成之后,片选信号/ CS 拉高。 读取数据的指令序列,如上图所示。如果一个读数据指令而发出的时候,设备正在擦除扇区,或者(忙= 1),该读指令将被忽略,也不会对当前周期有什么影响。 # 三、SPI时序介绍 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间。 SPI是一种高速、高效率的串行接口技术,一共有4根线。通常由一个主模块和一个或多个从模块组成,主模块选择一个从模块进行同步通信,从而完成数据的交换。SPI是一个环形结构,通信时需要至少4根线(在单向传输时3根线也可以)。分别是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选)。 (1)MISO– Master Input Slave Output,主设备数据输入,从设备数据输出; (2)MOSI– Master Output Slave Input,主设备数据输出,从设备数据输入; (3)SCLK – Serial Clock,时钟信号,由主设备产生; (4)CS – Chip Select,从设备使能信号,由主设备控制。 **SPI总线通过时钟极性和相位可以配置成4种时序:** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/3/1659491411123659851.png) **STM32F103参考手册,SPI章节介绍的时序图:** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20228/3/1659491431673445234.png) **SPI时序比较简单,CPU如果没有硬件支持,可以直接写代码采用IO口模拟,下面是模拟时序的示例的代码:** ```cpp SPI的模式1: u8 SPI_ReadWriteOneByte(u8 tx_data) { u8 i,rx_data=0; SCK=0; //空闲电平(默认初始化情况) for(i=0;i8;i++) { /*1. 主机发送一位数据*/ SCK=0;//告诉从机,主机将要发送数据 if(tx_data&0x80)MOSI=1; //发送数据 else MOSI=0; SCK=1; //告诉从机,主机数据发送完毕 tx_data=1; //继续发送下一位 /*2. 主机接收一位数据*/ rx_data=1; //默认认为接收到0 if(MISO)rx_data|=0x01; } SCK=0; //恢复空闲电平 return rx_data; } SPI的模式2: u8 SPI_ReadWriteOneByte(u8 tx_data) { u8 i,rx_data=0; SCK=0; //空闲电平(默认初始化情况) for(i=0;i8;i++) { /*1. 主机发送一位数据*/ SCK=1;//告诉从机,主机将要发送数据 if(tx_data&0x80)MOSI=1; //发送数据 else MOSI=0; SCK=0; //告诉从机,主机数据发送完毕 tx_data=1; //继续发送下一位 /*2. 主机接收一位数据*/ rx_data=1; //默认认为接收到0 if(MISO)rx_data|=0x01; } SCK=0; //恢复空闲电平 return rx_data; } SPI的模式3: u8 SPI_ReadWriteOneByte(u8 tx_data) { u8 i,rx_data=0; SCK=1; //空闲电平(默认初始化情况) for(i=0;i8;i++) { /*1. 主机发送一位数据*/ SCK=1;//告诉从机,主机将要发送数据 if(tx_data&0x80)MOSI=1; //发送数据 else MOSI=0; SCK=0; //告诉从机,主机数据发送完毕 tx_data=1; //继续发送下一位 /*2. 主机接收一位数据*/ rx_data=1; //默认认为接收到0 if(MISO)rx_data|=0x01; } SCK=1; //恢复空闲电平 return rx_data; } SPI的模式4: u8 SPI_ReadWriteOneByte(u8 tx_data) { u8 i,rx_data=0; SCK=1; //空闲电平(默认初始化情况) for(i=0;i8;i++) { /*1. 主机发送一位数据*/ SCK=0;//告诉从机,主机将要发送数据 if(tx_data&0x80)MOSI=1; //发送数据 else MOSI=0; SCK=1; //告诉从机,主机数据发送完毕 tx_data=1; //继续发送下一位 /*2. 主机接收一位数据*/ rx_data=1; //默认认为接收到0 if(MISO)rx_data|=0x01; } SCK=1; //恢复空闲电平 return rx_data; } ``` # 四、W25Q64的示例代码 ## 4.1 STM32采用硬件SPI读写W25Q64示例代码 ```cpp /* 函数功能:SPI初始化(模拟SPI) 硬件连接: MISO--->PB14 MOSI--->PB15 SCLK--->PB13 */ void SPI_Init(void) { /*开启时钟*/ RCC->APB1ENR|=114; //开启SPI2时钟 RCC->APB2ENR|=13; //PB GPIOB->CRH&=0X000FFFFF; //清除寄存器 GPIOB->CRH|=0XB8B00000; GPIOB->ODR|=0X713; //PB13/14/15上拉--输出高电平 /*SPI2基本配置*/ SPI2->CR1=0X0; //清空寄存器 SPI2->CR1|=015; //选择“双线双向”模式 SPI2->CR1|=011; //使用8位数据帧格式进行发送/接收; SPI2->CR1|=010; //全双工(发送和接收); SPI2->CR1|=19; //启用软件从设备管理 SPI2->CR1|=18; //NSS SPI2->CR1|=07; //帧格式,先发送高位 SPI2->CR1|=0x03;//当总线频率为36MHZ时,SPI速度为18MHZ,高速。 SPI2->CR1|=12; //配置为主设备 SPI2->CR1|=11; //空闲状态时, SCK保持高电平。 SPI2->CR1|=10; //数据采样从第二个时钟边沿开始。 SPI2->CR1|=16; //开启SPI设备。 } /* 函数功能:SPI读写一个字节 */ u8 SPI_ReadWriteOneByte(u8 data_tx) { u16 cnt=0; while((SPI2->SR&11)==0) //等待发送区空--等待发送缓冲为空 { cnt++; if(cnt>=65530)return 0; //超时退出 u16=2个字节 } SPI2->DR=data_tx; //发送一个byte cnt=0; while((SPI2->SR&10)==0) //等待接收完一个byte { cnt++; if(cnt>=65530)return 0; //超时退出 } return SPI2->DR; //返回收到的数据 } /* 函数功能:W25Q64初始化 硬件连接: MOSI--->PB15 MISO--->PB14 SCLK--->PB13 CS----->PB12 */ void W25Q64_Init(void) { /*1. 开时钟*/ RCC->APB2ENR|=13; //PB /*2. 配置GPIO口模式*/ GPIOB->CRH&=0xFFF0FFFF; GPIOB->CRH|=0x00030000; W25Q64_CS=1; //未选中芯片 SPI_Init(); //SPI初始化 } /* 函数功能:读取芯片的ID号 */ u16 W25Q64_ReadID(void) { u16 id; /*1. 拉低片选*/ W25Q64_CS=0; /*2. 发送读取ID的指令*/ SPI_ReadWriteOneByte(0x90); /*3. 发送24位的地址-0*/ SPI_ReadWriteOneByte(0); SPI_ReadWriteOneByte(0); SPI_ReadWriteOneByte(0); /*4. 读取芯片的ID*/ id=SPI_ReadWriteOneByte(0xFF)8; id|=SPI_ReadWriteOneByte(0xFF); /*5. 拉高片选*/ W25Q64_CS=1; return id; } /* 函数功能:检测W25Q64状态 */ void W25Q64_CheckStat(void) { u8 stat=1; while(stat&10) { W25Q64_CS=0; //选中芯片 SPI_ReadWriteOneByte(0x05); //发送读状态寄存器1指令 stat=SPI_ReadWriteOneByte(0xFF); //读取状态 W25Q64_CS=1; //取消选中芯片 } } /* 函数功能:页编程 说 明:一页最多写256个字节。 写数据之前,必须保证空间是0xFF 函数参数: u32 addr:页编程起始地址 u8 *buff:写入的数据缓冲区 u16 len :写入的字节长度 */ void W25Q64_PageWrite(u32 addr,u8 *buff,u16 len) { u16 i; W25Q64_Enabled(); //写使能 W25Q64_CS=0; //选中芯片 SPI_ReadWriteOneByte(0x02); //页编程指令 SPI_ReadWriteOneByte(addr>>16); //24~16地址 SPI_ReadWriteOneByte(addr>>8); //16~8地址 SPI_ReadWriteOneByte(addr); //8~0地址 for(i=0;i/8~0地址 } W25Q64_CS=1; //取消选中芯片 W25Q64_CheckStat(); //检测芯片忙状态 } /* 函数功能:连续读数据 函数参数: u32 addr:读取数据的起始地址 u8 *buff:读取数据存放的缓冲区 u32 len :读取字节的长度 */ void W25Q64_ReadByteData(u32 addr,u8 *buff,u32 len) { u32 i; W25Q64_CS=0; //选中芯片 SPI_ReadWriteOneByte(0x03); //读数据指令 SPI_ReadWriteOneByte(addr>>16); //24~16地址 SPI_ReadWriteOneByte(addr>>8); //16~8地址 SPI_ReadWriteOneByte(addr); //8~0地址 for(i=0;i W25Q64_CS=1; //取消选中芯片 } /* 函数功能:擦除一个扇区 函数参数: u32 addr:擦除扇区的地址范围 */ void W25Q64_ClearSector(u32 addr) { W25Q64_Enabled(); //写使能 W25Q64_CS=0; //选中芯片 SPI_ReadWriteOneByte(0x20); //扇区擦除指令 SPI_ReadWriteOneByte(addr>>16); //24~16地址 SPI_ReadWriteOneByte(addr>>8); //16~8地址 SPI_ReadWriteOneByte(addr); //8~0地址 W25Q64_CS=1; //取消选中芯片 W25Q64_CheckStat(); //检测芯片忙状态 } /* 函数功能:写使能 */ void W25Q64_Enabled(void) { W25Q64_CS=0; //选中芯片 SPI_ReadWriteOneByte(0x06); //写使能 W25Q64_CS=1; //取消选中芯片 } /* 函数功能:指定位置写入指定个数的数据,不考虑擦除问题 注意事项:W25Q64只能将1写为,不能将0写为1。 函数参数: u32 addr---写入数据的起始地址 u8 *buff---写入的数据 u32 len---长度 */ void W25Q64_WriteByteDataNoCheck(u32 addr,u8 *buff,u32 len) { u32 page_remain=256-addr%256; //计算当前页还可以写下多少数据 if(len=page_remain) //如果当前写入的字节长度小于剩余的长度 { page_remain=len; } while(1) { W25Q64_PageWrite(addr,buff,page_remain); if(page_remain==len)break; //表明数据已经写入完毕 buff+=page_remain; //buff向后偏移地址 addr+=page_remain; //起始地址向后偏移 len-=page_remain; //减去已经写入的字节数 if(len>256)page_remain=256; //如果大于一页,每次就直接写256字节 else page_remain=len; } } /* 函数功能:指定位置写入指定个数的数据,考虑擦除问题,完善代码 函数参数: u32 addr---写入数据的起始地址 u8 *buff---写入的数据 u32 len---长度 说明:擦除的最小单位扇区,4096字节 */ static u8 W25Q64_READ_WRITE_CHECK_BUFF[4096]; void W25Q64_WriteByteData(u32 addr,u8 *buff,u32 len) { u32 i; u32 len_w; u32 sector_addr; //存放扇区的地址 u32 sector_move; //扇区向后偏移的地址 u32 sector_size; //扇区大小。(剩余的空间大小) u8 *p=W25Q64_READ_WRITE_CHECK_BUFF;//存放指针 sector_addr=addr/4096; //传入的地址是处于第几个扇区 sector_move=addr%4096; //计算传入的地址存于当前的扇区的偏移量位置 sector_size=4096-sector_move; //得到当前扇区剩余的空间 if(len=sector_size) { sector_size=len; //判断第一种可能性、一次可以写完 } while(1) { W25Q64_ReadByteData(addr,p,sector_size); //读取剩余扇区里的数据 for(i=0;i } if(i!=sector_size) //判断是否需要擦除 { W25Q64_ClearSector(sector_addr*4096); } // for(i=0;i/ { // W25Q64_READ_WRITE_CHECK_BUFF[i]=buff[len_w++]; //// } // W25Q64_WriteByteDataNoCheck(addr,W25Q64_READ_WRITE_CHECK_BUFF,sector_size); W25Q64_WriteByteDataNoCheck(addr,buff,sector_size); if(sector_size==len)break; addr+=sector_size; //向后偏移地址 buff+=sector_size ;//向后偏移 len-=sector_size; //减去已经写入的数据 sector_addr++; //校验第下个扇区 if(len>4096) //表明还可以写一个扇区 { sector_size=4096;//继续写一个扇区 } else { sector_size=len; //剩余的空间可以写完 } } } ``` ## 4.2 STM32采用硬件SPI读写W25Q64示例代码 ```cpp #include "spi.h" /* 函数功能:SPI初始化(模拟SPI) 硬件连接: MISO--->PB14 MOSI--->PB15 SCLK--->PB13 */ void SPI_Init(void) { /*1. 开时钟*/ RCC->APB2ENR|=13; //PB /*2. 配置GPIO口模式*/ GPIOB->CRH&=0x000FFFFF; GPIOB->CRH|=0x38300000; /*3. 上拉*/ SPI_MOSI=1; SPI_MISO=1; SPI_SCLK=1; } /* 函数功能:SPI读写一个字节 */ u8 SPI_ReadWriteOneByte(u8 data_tx) { u8 data_rx=0; //存放读取的数据 u8 i; for(i=0;i8;i++) { SPI_SCLK=0; //准备发送数据 if(data_tx&0x80)SPI_MOSI=1; else SPI_MOSI=0; data_tx=1; //依次发送最高位 SPI_SCLK=1; //表示主机数据发送完成,表示从机发送完毕 data_rx=1; //表示默认接收的是0 if(SPI_MISO)data_rx|=0x01; } return data_rx; } #include "W25Q64.h" /* 函数功能:W25Q64初始化 硬件连接: MOSI--->PB15 MISO--->PB14 SCLK--->PB13 CS----->PB12 */ void W25Q64_Init(void) { /*1. 开时钟*/ RCC->APB2ENR|=13; //PB /*2. 配置GPIO口模式*/ GPIOB->CRH&=0xFFF0FFFF; GPIOB->CRH|=0x00030000; W25Q64_CS=1; //未选中芯片 SPI_Init(); //SPI初始化 } /* 函数功能:读取芯片的ID号 */ u16 W25Q64_ReadID(void) { u16 id; /*1. 拉低片选*/ W25Q64_CS=0; /*2. 发送读取ID的指令*/ SPI_ReadWriteOneByte(0x90); /*3. 发送24位的地址-0*/ SPI_ReadWriteOneByte(0); SPI_ReadWriteOneByte(0); SPI_ReadWriteOneByte(0); /*4. 读取芯片的ID*/ id=SPI_ReadWriteOneByte(0xFF)8; id|=SPI_ReadWriteOneByte(0xFF); /*5. 拉高片选*/ W25Q64_CS=1; return id; } /* 函数功能:检测W25Q64状态 */ void W25Q64_CheckStat(void) { u8 stat=1; while(stat&10) { W25Q64_CS=0; //选中芯片 SPI_ReadWriteOneByte(0x05); //发送读状态寄存器1指令 stat=SPI_ReadWriteOneByte(0xFF); //读取状态 W25Q64_CS=1; //取消选中芯片 } } /* 函数功能:页编程 说 明:一页最多写256个字节。 写数据之前,必须保证空间是0xFF 函数参数: u32 addr:页编程起始地址 u8 *buff:写入的数据缓冲区 u16 len :写入的字节长度 */ void W25Q64_PageWrite(u32 addr,u8 *buff,u16 len) { u16 i; W25Q64_Enabled(); //写使能 W25Q64_CS=0; //选中芯片 SPI_ReadWriteOneByte(0x02); //页编程指令 SPI_ReadWriteOneByte(addr>>16); //24~16地址 SPI_ReadWriteOneByte(addr>>8); //16~8地址 SPI_ReadWriteOneByte(addr); //8~0地址 for(i=0;i/8~0地址 } W25Q64_CS=1; //取消选中芯片 W25Q64_CheckStat(); //检测芯片忙状态 } /* 函数功能:连续读数据 函数参数: u32 addr:读取数据的起始地址 u8 *buff:读取数据存放的缓冲区 u32 len :读取字节的长度 */ void W25Q64_ReadByteData(u32 addr,u8 *buff,u32 len) { u32 i; W25Q64_CS=0; //选中芯片 SPI_ReadWriteOneByte(0x03); //读数据指令 SPI_ReadWriteOneByte(addr>>16); //24~16地址 SPI_ReadWriteOneByte(addr>>8); //16~8地址 SPI_ReadWriteOneByte(addr); //8~0地址 for(i=0;i W25Q64_CS=1; //取消选中芯片 } /* 函数功能:擦除一个扇区 函数参数: u32 addr:擦除扇区的地址范围 */ void W25Q64_ClearSector(u32 addr) { W25Q64_Enabled(); //写使能 W25Q64_CS=0; //选中芯片 SPI_ReadWriteOneByte(0x20); //扇区擦除指令 SPI_ReadWriteOneByte(addr>>16); //24~16地址 SPI_ReadWriteOneByte(addr>>8); //16~8地址 SPI_ReadWriteOneByte(addr); //8~0地址 W25Q64_CS=1; //取消选中芯片 W25Q64_CheckStat(); //检测芯片忙状态 } /* 函数功能:写使能 */ void W25Q64_Enabled(void) { W25Q64_CS=0; //选中芯片 SPI_ReadWriteOneByte(0x06); //写使能 W25Q64_CS=1; //取消选中芯片 } /* 函数功能:指定位置写入指定个数的数据,不考虑擦除问题 注意事项:W25Q64只能将1写为,不能将0写为1。 函数参数: u32 addr---写入数据的起始地址 u8 *buff---写入的数据 u32 len---长度 */ void W25Q64_WriteByteDataNoCheck(u32 addr,u8 *buff,u32 len) { u32 page_remain=256-addr%256; //计算当前页还可以写下多少数据 if(len=page_remain) //如果当前写入的字节长度小于剩余的长度 { page_remain=len; } while(1) { W25Q64_PageWrite(addr,buff,page_remain); if(page_remain==len)break; //表明数据已经写入完毕 buff+=page_remain; //buff向后偏移地址 addr+=page_remain; //起始地址向后偏移 len-=page_remain; //减去已经写入的字节数 if(len>256)page_remain=256; //如果大于一页,每次就直接写256字节 else page_remain=len; } } /* 函数功能:指定位置写入指定个数的数据,考虑擦除问题,完善代码 函数参数: u32 addr---写入数据的起始地址 u8 *buff---写入的数据 u32 len---长度 说明:擦除的最小单位扇区,4096字节 */ static u8 W25Q64_READ_WRITE_CHECK_BUFF[4096]; void W25Q64_WriteByteData(u32 addr,u8 *buff,u32 len) { u32 i; u32 sector_addr; //存放扇区的地址 u32 sector_move; //扇区向后偏移的地址 u32 sector_size; //扇区大小。(剩余的空间大小) u8 *p=W25Q64_READ_WRITE_CHECK_BUFF;//存放指针 sector_addr=addr/4096; //传入的地址是处于第几个扇区 sector_move=addr%4096; //计算传入的地址存于当前的扇区的偏移量位置 sector_size=4096-sector_move; //得到当前扇区剩余的空间 if(len=sector_size) { sector_size=len; //判断第一种可能性、一次可以写完 } while(1) { W25Q64_ReadByteData(addr,p,sector_size); //读取剩余扇区里的数据 for(i=0;i } if(i!=sector_size) //判断是否需要擦除 { W25Q64_ClearSector(sector_addr*4096); } W25Q64_WriteByteDataNoCheck(addr,buff,sector_size); if(sector_size==len)break; addr+=sector_size; //向后偏移地址 buff+=sector_size ;//向后偏移 len-=sector_size; //减去已经写入的数据 sector_addr++; //校验第下个扇区 if(len>4096) //表明还可以写一个扇区 { sector_size=4096;//继续写一个扇区 } else { sector_size=len; //剩余的空间可以写完 } } } ```
-
作者:佚名如果要让人工智能对制造业有价值,那它必须是整个制造过程的一部分。制造商可以在多种方面受益于人工智能,如提高生产、质量控制和效率。尽管人工智能为制造商提供了几种新的应用,但为了获得最大的价值,企业必须在整个制造过程中使用它。这意味着制造工程师需要专注于人工智能数据准备、建模、仿真和测试以及部署的四个关键方面,以成功地在不间断的制造过程中使用人工智能。不需要成为人工智能专家工程师们可能认为开发人工智能模型需要相当长的时间,但事实往往并非如此。建模是工作流过程中的一个重要步骤,但不是最终目标。要成功使用人工智能,关键是在流程一开始就确定任何问题。这让工程师知道工作流的哪些方面需要投入时间和资源以获得最佳结果。在讨论工作流时,有两点需要考虑:制造系统庞大而复杂,人工智能只是其中的一部分。因此,AI需要在所有场景下与生产线上的所有其他工作部件一起工作。其中一部分是使用工业通信协议,如OPCUA,以及其他机器软件,如控制、监控逻辑和人机界面,从设备上的传感器收集数据。在这种情况下,工程师在融入AI时就已经为成功做好了准备,因为他们已经了解设备,且不管他们是否拥有丰富的AI经验。换句话说,如果他们不是人工智能专家,仍然可以利用其的专业知识成功地将AI添加到工作流程中。人工智能驱动的工作流程构建人工智能驱动的工作流程需要4个步骤:1.数据准备当没有良好的数据来训练AI模型时,项目更有可能失败。因此,数据准备至关重要。错误的数据可能会让工程师浪费时间去弄清楚为什么这个模型行不通。训练模型通常是最耗时的步骤,但也是重要的步骤。工程师们应该从尽可能干净、有标签的数据开始,专注于输入模型的数据,而不是专注于改进模型。例如,工程师应该专注于预处理和确保输入模型的数据被正确标记,而不是调整参数和微调模型。这可以确保模型理解和处理数据。另一个挑战是机器操作员和机器制造商之间的差异。前者通常可以访问设备的操作,而后者需要这些数据来训练AI模型。为了确保机器制造商与机器操作员(即他们的客户)共享数据,双方应该制定协议和商业模式来管理这种共享。建筑设备制造商Caterpillar提供了一个很好的例子来说明数据准备的重要性。其收集了大量的现场数据,虽然这对精确的AI建模是必要的,但这意味着需要大量的时间来进行数据清洗和标记。该公司成功地利用MATLAB简化了这一过程。它可以帮助该公司开发干净、有标签的数据,然后将这些数据输入机器学习模型,利用现场机械的强大洞察力。此外,对于拥有领域专业知识但不是人工智能专家的用户,该过程是可伸缩的和灵活的。2.人工智能建模这个阶段在数据清理并正确标记后开始。实际上,就是模型从数据中学习的时候。当工程师们有了一个准确而可靠的模型,可以根据输入做出智能决策时,就知道他们已经进入了一个成功的建模阶段。这个阶段还需要工程师使用机器学习、深度学习或两者结合来决定哪个结果最准确。在建模阶段,无论使用深度学习还是机器学习模型,重要的是能够访问人工智能工作流的几种算法,如分类、预测和回归。作为一个起点,由更广泛的社区创建的各种预构建模型可能是有帮助的。工程师也可以使用灵活的工具,如MATLAB和Simulink。值得注意的是,尽管算法和预先构建的模型是一个很好的开始,但工程师应该通过使用其领域内其他人的算法和示例,找到最有效的路径来实现他们的特定目标。这就是为什么MATLAB提供了数百个不同的例子来构建跨越多个领域的AI模型。此外,还需考虑的另一个方面是,跟踪更改和记录训练迭代是至关重要的。像实验管理器此类工具可以通过解释导致最准确的模型和可重复的结果的参数来帮助实现这一点。3.模拟和测试这一步确保AI模型正确工作。人工智能模型作为一个更大系统的一部分,需要与系统中的各个部分一起工作。例如,在制造业中,AI模型可能支持预测性维护、动态轨迹规划或视觉质量检查。其余的机器软件包括控制、监控逻辑和其他组件。模拟和测试让工程师知道,模型的一部分按照预期工作,包括自身工作和与其他系统一起工作。只有当能够证明模型按预期工作,并且具有足够的有效性来降低风险时,该模型才能在现实世界中使用。无论在什么情况下,模型都必须以其应该的方式做出响应。在使用模型之前,工程师应该在这个阶段了解几个问题:模型的准确度高吗?每个场景中,模型是否按照预期执行?所有边缘情况都被覆盖了吗?像Simulink这类的工具可以让工程师在设备上使用之前,检查模型是否按预期情况运行。这有助于避免在重新设计上花费时间和金钱。这些工具还通过成功地模拟和测试模型的预期案例,并确认满足预期目标,从而帮助建立高度信任。4.部署一旦准备好部署,下一步就是用其将使用的语言准备好模型。为此,工程师通常需要共享一个现成的模型。这让模型适合指定的控制硬件环境,如嵌入式控制器、PLC或边缘设备。MATLAB等灵活的工具通常可以在任何类型的场景中生成最终代码,为工程师提供了在不同硬件供应商的许多不同环境中部署模型的能力。他们可以做到这一点,而无需重新编写原始代码。例如,当将模型直接部署到PLC时,自动代码生成消除了手工编程过程中可能包含的编码错误。这也提供了优化的C/c++或IEC61131代码,将有效地运行在主要供应商的PLC上。成功部署人工智能,并不需要数据科学家或人工智能专家。然而,有一些关键的资源可以帮助工程师和其的AI模型为成功做好准备。这包括为科学家和工程师制作的特定工具,将人工智能添加到工作流程中的应用程序和功能,各种不间断操作使用的部署选项,以及随时准备回答AI相关问题的专家。给工程师提供正确的资源来帮助成功添加人工智能,将让他们交付最好的结果。责任编辑:华轩 来源: 千家网
-
近日,在福建福州举行的第五届数字中国建设峰会上,中国工业互联网研究院发布了2021年全国县域工业互联网发展Top20榜单。据公布的榜单显示,昆山市、江阴市、张家港市、慈溪市、太仓市、常熟市、晋江市、长沙县、余姚市、福清市、海盐县、义乌市、胶州市、宁海县、乐清市、宜兴市、大冶市、浏阳市、泰兴市、闽侯县等被评为2021年全国工业互联网发展二十强县。图源 中国工业互联网研究院据了解,为洞察县域工业互联网发展现状和未来方向,推动工业互联网发展走深向实,助力县域经济高质量发展,中国工业互联网研究院基于“基础设施、融合应用、产业生态、发展环境”四个维度,13项一级指标,20项二级指标构建评价体系,形成全国县域工业互联网发展二十强榜单。对2021年全国县域工业互联网发展二十强数据综合分析结果显示,在基础设施方面,二十强县每万人拥有5G基站数量平均达15个,区域培育工业互联网重点平台数量平均超5家,二十强县中19个县域位于国家工业互联网大数据中心区域分中心服务覆盖范围内。从产业生态和科技创新角度看,二十强县工业增加值平均达766.34亿元,规上工业企业数量平均超过1071家,高新技术企业数量平均超过623家。在融合应用方面,工业互联网带动二十强县生产总值增长合计超1434亿元,带动地区就业总人数超86371人次。目前,工业互联网是我国产业转型方面的重大战略,但由于我国工业产业和制造企业的情况较为复杂,其发展面临着不小的挑战。推进工业互联网真正落地,不仅需要5G、大数据等技术的支撑,同时也需要政府在政策上的支持。从产业角度来看,工业互联网的落地和普及,需要各行各业的助力,先进制造企业依托自身优势,打造具有可操作性的工业互联网解决方案,发现落地中的问题并解决,工业互联网才能蓬勃发展。转载自http://www.iotworld.com.cn/html/News/202207/c744f187e6773c8f.shtml
-
7月19日,国务院新闻办公室举行新闻发布会,介绍2022年上半年工业和信息化发展情况,工业和信息化部信息通信管理局负责人王鹏参加本次发布会。据了解,今年上半年,电子信息制造业、软件业、通信业和互联网的收入总规模突破10万亿元,平稳向好发展态势明显,产业韧性持续增强。“我国数字经济已连续数年稳居世界第二,对经济增长的拉动作用不断增强,可以从数字产业规模持续提升、产业数字化转型进程提速升级两个维度简要介绍一下。”王鹏表示,上半年,网上购物、在线教育、远程医疗等“非接触经济”全面提速,数字产业保持良好增长势头,为经济发展注入了强劲动力。王鹏介绍,我们着力深化新一代信息技术与制造业融合,工业互联网创新发展迈出更坚实步伐,“5G+工业互联网”512工程纵深推进,建设项目超过3100个,其中二季度新增项目700个。实施智能制造工程,孵化解决方案供应商已经超6000家,服务范围覆盖90%以上制造业领域,规模以上工业企业关键工序数控化率和数字化研发设计工具普及率分别达到55.7%、75.1%,传统产业数字化转型提升进程进一步提速。
-
(1)航空航天中需要传感器敏感的参数(2)敏感参数在飞机和发动机自动控制中有?重要作用?(3)敏感参数在自动寻的和导航中有重要作用?(4)敏感参数在飞机和发动机性能实验中有?重要作用?航空航天用传感器的特点传感器的性能和可靠性受工作条件的影响,而飞行界的工作条件十分恶劣和复杂,故航空航?天用传感器的技术要求不同于其他领域用传感器的技术要求。从上可知在监视飞机状况的过程中需要用到传感器、人工智能和先进的分析方法,这样才能达到连续、实时地评估飞机状况的目的。例如一下各式传感器在飞机制造领域的相关应用 。
-
7月25日消息,英特尔与联发科宣布建立战略伙伴关系。英特尔将通过其代工服务部门(IFS)向联发科供应芯片。英特尔表示,联发科将使用英特尔的工艺技术为一系列智能边缘设备生产芯片。联发科所制造的芯片用于亚马逊的Echo音箱和健身器材制造商Peloton Interactive。预计此次英特尔在代工业务上达成的合作,将加剧与台积电和三星电子竞争。据悉,2021年,英特尔宣布成立代工服务事业部,为其他厂商代工芯片,旨在让该公司重振其市场地位,并希望在全球芯片制造领域拥有更大的影响力。据外媒7月报道,为了建立能够与三星和台积电抗衡的晶圆代工业务,英特尔正积极从三星和台积电等竞争对手中聘请高管和资深员工。报道显示,英特尔近期招募了来自台积电的Suk Lee和Michael Chang,在英特尔的代工服务事业部 担任要职。2022年早些时候,英特尔聘用了此前在三星北美代工部门的高级副总裁和负责人Hong Hao。曾为台积电工作超过21年的Margaret Han,也被英特尔聘为该公司代工服务的全球外部制造采购和供应商管理高级总监。
推荐直播
-
TinyEngine低代码引擎系列.第1讲——低代码浪潮之下,带你走进TinyEngine
2024/11/11 周一 16:00-18:00
李老师 高级前端开发工程师
低代码浪潮之下,带你走进TinyEngine。李旭宏老师将从低代码的发展趋势、TinyEngine的项目介绍,三方物料组件的使用、跨技术栈的使用、源码生成能力的差异性对比等多个方面带大家对TinyEngine低代码引擎有一个更清晰的认知和了解。
即将直播 -
0代码智能构建AI Agent——华为云AI原生应用引擎的架构与实践
2024/11/13 周三 16:30-18:00
苏秦 华为云aPaaS DTSE技术布道师
大模型及生成式AI对应用和软件产业带来了哪些影响?从企业场景及应用开发视角,面向AI原生应用需要什么样的工具及平台能力?企业要如何选好、用好、管好大模型,使能AI原生应用快速创新?本期直播,华为云aPaaS DTSE技术布道师苏秦将基于华为云自身实践出发,深入浅出地介绍华为云AI原生应用引擎,通过分钟级智能生成Agent应用的方式帮助企业完成从传统应用到智能应用的竞争力转型,使能千行万业智能应用创新。
去报名
热门标签