Kernel Regmap

Regmap是对i2c/spi/spmi等总线的封装,旨在简化操作和提高效率。尽管Regmap的缓存功能可能在某些情况下提升读取性能,但对写操作和主动变化的寄存器并无显著优化。Regmap的使用包括配置寄存器位宽、地址位宽等,并提供了更新和写入位的接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Regmap是什么东西? 

Regmap就是对i2c/spi/spmi等总线的一层封装,同时利用了缓存及压缩技术,

以期达到操作总线更简单、操作效率更高的目标。(个人认为对IO性能优化有限)


一、关于优化IO性能


Regmap读操,如果懂合理利用cache功能,是可能能提升IO性能,因为读的只是cache内容,未真正操作外设的寄存器。



Regmap写操作,必须去操作外设寄存器,否则操作就达不到预期效果啦。根本没有提升IO性能。




基于Regmap读、写操作的实现方法,总结:

对于读非主动变化寄存器(即,此类寄存器读出来的值,就上次写进去的值。)才有优化作用。

==============》这种场景情况很少吧。


对于读主动变化寄存器(比如,状态寄存器,Sensor/TP/TPS等数据寄存器),根本不能使用缓存值,无优化作用。

=============》这才是频繁的现实需求啊。


对于写寄存器 ,如果cache的话,后面也要去主动sync到外设。

=============》这种需求很少会用吧。


二、关于regmap使用


regmap缓存及缓存压缩类型,其中REGCACHE_NONE不是缓存类型,直接操作外设寄存器。




regmap 初始化需要配置的重要项:寄存器位宽 ,地址位宽,寄存器总数,等 。

如果要使用cache功能,注意:前面提到的变化的状态寄存器,变化的数据寄存器,必须使用volatile_reg()用于指明。




使用cache功能regmap_config例子:




不使用cache功能regmap_config例子:




Regmap初始化、及操作接口






regmap_update_bits() , regmap_write_bits() 接口很方便对按位操作寄存器


Regmap操作i2c例子:






Regmap总结:


使用确实更简单,效率提升有限。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值