完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现有一款产品使用TAS5805M作为音频功放,但是初始化的IIC驱动一直不成功,求助一份IIC的底层驱动代码,使用单片机为ST的030。另外读取寄存器的数值应该怎么操作啊?也是要和写一样先BOOK再PAGE然后才是寄存器吗?这个芯片寄存器太复杂了,初始化都还没写成功。 |
|
相关推荐
5个回答
|
|
|
|
|
|
您好,
我们只有以下参考驱动程序代码。我们曾与SoC供应商合作实现以下驱动程序代码。请注意,必须遵循数据表第43页中的通电顺序。 tas5805_Reference_Driver.zip 下面文档希望对您配置寄存器有帮助: 4152.TAS58x5 -Introduction of Register Map and Power on Sequence.pdf |
|
|
|
Hi TI工程师,感谢回复上面问题。另外就是IIC读取的时候是否有顺序要求?比如现在读取某个寄存器的值,是否先要发送在哪一个BOOK,然后是哪个PAG,最后才是寄存器地址?还是说直接发送器件地址,然后发送寄存器地址即可?感觉和标准的IIC通信有点不一样。
|
|
|
|
是的,要先到当前book的page0。读取寄存器时序请查看datasheet 中 7.5.2.3 Random Read 和 7.5.2.4 Sequential Read
|
|
|
|
首先,我们需要了解TAS5805M的I2C通信协议和寄存器配置。以下是一份基于STM32F030的I2C驱动代码,以及如何读取寄存器的数值。
1. I2C驱动代码: ```c #include "stm32f0xx_hal.h" #define TAS5805M_I2C_ADDRESS 0x40 // TAS5805M的I2C地址 #define TAS5805M_PAGE_REG 0x00 // 页面寄存器地址 #define TAS5805M_PAGE1 0x01 // 页面1 #define TAS5805M_PAGE2 0x02 // 页面2 I2C_HandleTypeDef hi2c1; void I2C1_Init(void) { hi2c1.Instance = I2C1; hi2c1.Init.ClockSpeed = 100000; hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; hi2c1.Init.OwnAddress1 = 0; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; hi2c1.Init.OwnAddress2 = 0; hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; HAL_I2C_Init(&hi2c1); } uint8_t TAS5805M_WriteReg(uint8_t page, uint8_t reg, uint8_t value) { uint8_t data[3] = {page, reg, value}; HAL_StatusTypeDef status; status = HAL_I2C_Master_Transmit(&hi2c1, TAS5805M_I2C_ADDRESS, data, 3, HAL_MAX_DELAY); if (status != HAL_OK) { return 1; } return 0; } uint8_t TAS5805M_ReadReg(uint8_t page, uint8_t reg, uint8_t *value) { HAL_StatusTypeDef status; // Set page register status = HAL_I2C_Master_Transmit(&hi2c1, TAS5805M_I2C_ADDRESS, &page, 1, HAL_MAX_DELAY); if (status != HAL_OK) { return 1; } // Read register status = HAL_I2C_Master_Receive(&hi2c1, TAS5805M_I2C_ADDRESS, value, 1, HAL_MAX_DELAY); if (status != HAL_OK) { return 1; } return 0; } ``` 2. 初始化TAS5805M: ```c void TAS5805M_Init(void) { I2C1_Init(); // Set page 1 if (TAS5805M_WriteReg(TAS5805M_PAGE_REG, TAS5805M_PAGE1, 0x00) != 0) { // Error handling } // Set page 2 if (TAS5805M_WriteReg(TAS5805M_PAGE_REG, TAS5805M_PAGE2, 0x00) != 0) { // Error handling } // Initialize other registers // ... } ``` 3. 读取寄存器的数值: ```c uint8_t reg_value; if (TAS5805M_ReadReg(TAS5805M_PAGE1, 0x01, ®_value) == 0) { // Successfully read the register value } else { // Error handling } ``` 在初始化过程中,你需要按照TAS5805M的数据手册配置寄存器。首先设置页面寄存器,然后配置其他寄存器。如果遇到问题,请检查I2C连接和硬件连接是否正确。 |
|
|
|
只有小组成员才能发言,加入小组>>
340 浏览 1 评论
533 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
777 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
653 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1132 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
65浏览 29评论
171浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
255浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
205浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
60浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 05:11 , Processed in 1.096277 second(s), Total 93, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号