Portapack应用开发教程 (十六) Debug程序 C 声卡芯片wm8731和ak4951

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

我前面改了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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值