我前面改了max2875的驱动代码,可以从max2875驱动输出不同内容到debug屏幕上了。验证了之前看的调用关系都是对的。
但是max2875芯片和rffc507x芯片的代码我还看不太懂。无法仿照他们来实现flash芯片的驱动(都是spi的)。
我还是决定从声卡芯片入手,因为他们是iic的,我在调试小四轴飞控时对mpu6050的操作也是经过iic的。另外,前段时间加入内置喇叭和麦克风时我也对声卡芯片比较熟悉了。
其实Portapack声卡芯片有两种,老款和新款板子的声卡芯片是不一样的。对于两种芯片,portapack固件都有支持。
左边是老款的右边是新款的板子,可以看到高亮部分的声卡芯片名称是不一样的。


点进去以后如下:

左边老款芯片的寄存器只有10个,右边有大约50个。
接下来看程序
firmware/application/portapack.cpp
WM8731 audio_codec_wm8731 { i2c0, 0x1a };
AK4951 audio_codec_ak4951 { i2c0, 0x12 };
enum class PortaPackModel {
R1_20150901,
R2_20170522,
};
static PortaPackModel portapack_model() {
static Optional<PortaPackModel> model;
if( !model.is_valid() ) {
if( audio_codec_wm8731.detected() ) {
model = PortaPackModel::R1_20150901;
} else {
model = PortaPackModel::R2_20170522;
}
}
return model.value();
}
static audio::Codec* portapack_audio_codec() {
return (portapack_model() == PortaPackModel::R2_20170522)
? static_cast<audio::Codec*>(&audio_c

本文详细解读了WM8731和AK4951两种声卡芯片的I2C驱动代码,涉及寄存器操作、内存映射(map)的使用和通信流程。作者通过实例展示了如何通过I2C地址检测、内存映射操作和函数调用来控制这些芯片,为后续SPI驱动的学习提供参考。
最低0.47元/天 解锁文章
2729

被折叠的 条评论
为什么被折叠?



