AM3359 I2C 音频驱动问题

静观世界风云 2013-04-24 10:39:19
各位好,我在TI的 am335x平台上调试基于I2C的音频驱动。
碰到问题,请求大家帮忙

我的环境如下:
CPU: am3359
EVM包 psp04.06.00.07
音频芯片是:TLV320AIC3106RGZ


在调试音频过程中,碰到问题,过程描述如下:

首先,修改board-support/linux-3.2-psp04.06.00.07.sdk/arch/arm/mach-omap2/board-am33txevm.c
增加以下代码

/* Module pin mux for mcasp0 */
static struct pinmux_config mcasp0_pin_mux[] = {
{"mcasp0_aclkx.mcasp0_aclkx", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
{"mcasp0_fsx.mcasp0_fsx", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
{"mcasp0_axr0.mcasp0_axr0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
{"mcasp0_ahclkr.mcasp0_axr2", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN},
{NULL, 0},
};

static u8 am335x_iis_serializer_direction0[] = {
TX_MODE, INACTIVE_MODE, RX_MODE, INACTIVE_MODE,
INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
};


static struct snd_platform_data am335x_evm_snd_data0 = {
.tx_dma_offset = 0x46000000, /* McASP0 */
.rx_dma_offset = 0x46000000,
.op_mode = DAVINCI_MCASP_IIS_MODE,
.num_serializer = ARRAY_SIZE(am335x_iis_serializer_direction0),
.tdm_slots = 2,
.serial_dir = am335x_iis_serializer_direction0,
.asp_chan_q = EVENTQ_2,
.version = MCASP_VERSION_3,
.txnumevt = 1,
.rxnumevt = 1,
};


static void mcasp0_init(int evm_id, int profile)
{
/* Configure McASP */
setup_pin_mux(mcasp0_pin_mux);
am335x_register_mcasp(&am335x_evm_snd_data0, 0);
return;
}

static struct evm_dev_cfg beaglebone_dev_cfg[] = {
......
{mcasp0_init, DEV_ON_BASEBOARD, PROFILE_NONE},
....
}


其次修改:sound/soc/davinci/davinci-evm.c
static struct snd_soc_dai_link am335x_evm_dai = {
.name = "TLV320AIC3X",
.stream_name = "AIC3X",
.cpu_dai_name = "davinci-mcasp.0", //1-->0
.codec_dai_name = "tlv320aic3x-hifi",
.codec_name = "tlv320aic3x-codec.3-001b", //2-->1
.platform_name = "davinci-pcm-audio",
.init = evm_aic3x_init,
.ops = &evm_ops,
};



输出信息:
[ 1.586273] usbhid: USB HID core driver
[ 1.591125] usbcore: registered new interface driver snd-usb-audio
[ 1.599212] tlv320aic3x-codec 3-001b: ---wxj---aic3x_i2c_probe()
[ 1.605529] tlv320aic3x-codec 3-001b: ---wxj---aic3x->control_type = SND_SOC_I2C
[ 1.613281] tlv320aic3x-codec 3-001b: ---wxj---snd_soc_register_codec return 0
[ 1.625732] soc-audio soc-audio.0: binding TLV320AIC3X at idx 0
[ 1.631927] ---wxj---soc-core.c soc_bind_dai_link(), binding TLV320AIC3X at idx 0
[ 1.639770] soc-audio soc-audio.0: find CPU DAI from registered DAIs: dai_name davinci-mcasp.0
[ 1.648803] soc-audio soc-audio.0: CODEC found, so find CODEC DAI from registered DAIs from this CODEC: dai_name davinci-mcasp.0
[ 1.660888] soc-audio soc-audio.0: then find one from the set of registered platforms: platform_name davinci-pcm-audio
[ 1.672088] ---wxj---soc-core.c soc_bind_dai_link(),rtd->complete=1, return 1
[ 1.679656] tlv320aic3x-codec 3-001b: ---wxj---tlv320aic3x.c aic3x_probe()
[ 1.686889] tlv320aic3x-codec 3-001b: Failed to get supply 'IOVDD': -19
[ 1.693817] tlv320aic3x-codec 3-001b: Failed to request supplies: -19
[ 1.700561] tlv320aic3x-codec 3-001b: asoc: failed to probe CODEC tlv320aic3x-codec.3-001b: -19
[ 1.709716] asoc: failed to instantiate card AM335X EVM: -19
[ 1.715698] ALSA device list:
[ 1.718811] No soundcards found.


音频芯片的供电部分硬件工程师测量正常。

...全文
1869 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_23678887 2015-05-11
  • 打赏
  • 举报
回复
你好: 希望看到哦阿能回复下,我也遇到了和你一样的问题,在用aplay 播放wav文件时,系统崩溃了,请问你的问题解决了吗?
samyoju 2013-07-15
  • 打赏
  • 举报
回复
引用 楼主 wxjggwxjgg 的回复:
各位好,我在TI的 am335x平台上调试基于I2C的音频驱动。 碰到问题,请求大家帮忙 我的环境如下: CPU: am3359 EVM包 psp04.06.00.07 音频芯片是:TLV320AIC3106RGZ 在调试音频过程中,碰到问题,过程描述如下: 首先,修改board-support/linux-3.2-psp04.06.00.07.sdk/arch/arm/mach-omap2/board-am33txevm.c 增加以下代码 /* Module pin mux for mcasp0 */ static struct pinmux_config mcasp0_pin_mux[] = { {"mcasp0_aclkx.mcasp0_aclkx", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, {"mcasp0_fsx.mcasp0_fsx", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, {"mcasp0_axr0.mcasp0_axr0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, {"mcasp0_ahclkr.mcasp0_axr2", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, {NULL, 0}, }; static u8 am335x_iis_serializer_direction0[] = { TX_MODE, INACTIVE_MODE, RX_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, }; static struct snd_platform_data am335x_evm_snd_data0 = { .tx_dma_offset = 0x46000000, /* McASP0 */ .rx_dma_offset = 0x46000000, .op_mode = DAVINCI_MCASP_IIS_MODE, .num_serializer = ARRAY_SIZE(am335x_iis_serializer_direction0), .tdm_slots = 2, .serial_dir = am335x_iis_serializer_direction0, .asp_chan_q = EVENTQ_2, .version = MCASP_VERSION_3, .txnumevt = 1, .rxnumevt = 1, }; static void mcasp0_init(int evm_id, int profile) { /* Configure McASP */ setup_pin_mux(mcasp0_pin_mux); am335x_register_mcasp(&am335x_evm_snd_data0, 0); return; } static struct evm_dev_cfg beaglebone_dev_cfg[] = { ...... {mcasp0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, .... } 其次修改:sound/soc/davinci/davinci-evm.c static struct snd_soc_dai_link am335x_evm_dai = { .name = "TLV320AIC3X", .stream_name = "AIC3X", .cpu_dai_name = "davinci-mcasp.0", //1-->0 .codec_dai_name = "tlv320aic3x-hifi", .codec_name = "tlv320aic3x-codec.3-001b", //2-->1 .platform_name = "davinci-pcm-audio", .init = evm_aic3x_init, .ops = &evm_ops, }; 输出信息: [ 1.586273] usbhid: USB HID core driver [ 1.591125] usbcore: registered new interface driver snd-usb-audio [ 1.599212] tlv320aic3x-codec 3-001b: ---wxj---aic3x_i2c_probe() [ 1.605529] tlv320aic3x-codec 3-001b: ---wxj---aic3x->control_type = SND_SOC_I2C [ 1.613281] tlv320aic3x-codec 3-001b: ---wxj---snd_soc_register_codec return 0 [ 1.625732] soc-audio soc-audio.0: binding TLV320AIC3X at idx 0 [ 1.631927] ---wxj---soc-core.c soc_bind_dai_link(), binding TLV320AIC3X at idx 0 [ 1.639770] soc-audio soc-audio.0: find CPU DAI from registered DAIs: dai_name davinci-mcasp.0 [ 1.648803] soc-audio soc-audio.0: CODEC found, so find CODEC DAI from registered DAIs from this CODEC: dai_name davinci-mcasp.0 [ 1.660888] soc-audio soc-audio.0: then find one from the set of registered platforms: platform_name davinci-pcm-audio [ 1.672088] ---wxj---soc-core.c soc_bind_dai_link(),rtd->complete=1, return 1 [ 1.679656] tlv320aic3x-codec 3-001b: ---wxj---tlv320aic3x.c aic3x_probe() [ 1.686889] tlv320aic3x-codec 3-001b: Failed to get supply 'IOVDD': -19 [ 1.693817] tlv320aic3x-codec 3-001b: Failed to request supplies: -19 [ 1.700561] tlv320aic3x-codec 3-001b: asoc: failed to probe CODEC tlv320aic3x-codec.3-001b: -19 [ 1.709716] asoc: failed to instantiate card AM335X EVM: -19 [ 1.715698] ALSA device list: [ 1.718811] No soundcards found. 音频芯片的供电部分硬件工程师测量正常。
我也遇到这个问题。wxjggwxjgg,解决了吗?
anuoLinux 2013-07-14
  • 打赏
  • 举报
回复
我用的I2C4.不是I2C0.因此上面部分需要修改,这样在dev下可以看到设备节点了,但是我tlv320aic32x芯片的MCLK晶振不是24.576M, 而是24M的,开发板是24.576的,声音正常,我现在能控制设备,但是声音不对,不知道频率这块怎样修改,即能实现和以前一样的,MCASP2的ACLKX时钟选择的外部时钟,应该就是tlvaic32提供的吧,如果时钟不对,是不是导致我现在的问题呢?哪位大手指点下?
anuoLinux 2013-07-14
  • 打赏
  • 举报
回复
1.sound/soc/davinci/davinci-evm.c static struct snd_soc_dai_link ti81xx_evm_dai[]={ .codec_name="tlv320aic3x-codec.4-0018",//If I2c1 then use tlv320aic3x-codec.1-0018 (I2c1~I2c4) }
liujwcool1 2013-07-13
  • 打赏
  • 举报
回复
怎么解决的 ?说说
anuoLinux 2013-07-12
  • 打赏
  • 举报
回复
问题得到解决
anuoLinux 2013-07-12
  • 打赏
  • 举报
回复
你好,我现在的音频驱动也遇到了点问题,平台是DM8148,开发板的音频驱动以前是挂载I2c0上,我们自己做的板子挂载I2c3上,其于什么都没有变,现在I2c3上可以检测到tlvaic32芯片,读出来的地址也是0x18,可是驱动无发执行probe函数,即 Tlv320aic3x.c (sound\soc\codecs) 中的函数: aic3x_probe无法得到执行,因此在/dev/snd/下没有看到音频设备节点controlC0 pcmC0D0c pcmC0D0p 我的修改部分: static struct i2c_board_info __initdata ti814x_i2c_boardinfo3[] = { { I2C_BOARD_INFO("tlv320aic3x", 0x18), }, }; 开发板以前为: static struct i2c_board_info __initdata ti814x_i2c_boardinfo[] = { { I2C_BOARD_INFO("eeprom", 0x50), .platform_data = &eeprom_info, }, { I2C_BOARD_INFO("cpld", 0x23), }, { I2C_BOARD_INFO("tlv320aic3x", 0x18), }, { I2C_BOARD_INFO("IO Expander", 0x20), }, ----- } 因此驱动与设备名字肯定是对应的,如果我将ti814x_i2c_boardinfo中的I2C_BOARD_INFO("tlv320aic3x", 0x18), 即开发板自带的配置放里面---I2c0的,我发现在probe函数可以调用,并且/dev/snd下有设备 疑问: 音频设备已经在i2c3上而不是I2c0上,为什么用开发板自带的配置信息,会看到设备呢?而我类似的修改I2c3的配置看不到呢?为什么不能调用prboe函数呢?如果说名字没有对上,但是我和开发板一样的的,这个肯定没问题啊?这个probe函数何时被调用的呢? 请高人指点。 联系方式:QQ 254536690 一起探讨。互相进步哈。
静观世界风云 2013-05-03
  • 打赏
  • 举报
回复
大侠,我往下调试,又碰到问题了,用aplay 列设备信息的话,显示如下: [root@me /]# aplay -L null Discard all samples (playback) or generate zero samples (capture) default:CARD=EVM AM335X EVM, Default Audio Device [root@me /]# aplay -l **** List of PLAYBACK Hardware Devices **** card 0: EVM [AM335X EVM], device 0: AIC3X tlv320aic3x-hifi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0 我用aplay 播放wav文件时,系统崩溃了, 信息如下: ./aplay -D hw:0,0 tweet.wav Playing WAVE 'tweet.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo [ 422.456115] Unable to handle kernel NULL pointer dereference at virtual address 0000002c [ 422.464630] pgd = c0004000 [ 422.467437] [0000002c] *pgd=00000000 [ 422.471191] Internal error: Oops: 17 [#1] [ 422.475372] Modules linked in: [ 422.478546] CPU: 0 Not tainted (3.2.0 #396) [ 422.483306] PC is at regulator_enable+0xc/0x260 [ 422.488037] LR is at regulator_bulk_enable_async+0x18/0x20 [ 422.493743] pc : [<c0231804>] lr : [<c0231a70>] psr: 60000013 [ 422.493774] sp : c784bec8 ip : c784bef0 fp : c784beec [ 422.505737] r10: c0060fe8 r9 : c7814200 r8 : c7a459c8 [ 422.511199] r7 : c7a459c0 r6 : c7817740 r5 : c7a459c8 r4 : c7925184 [ 422.518005] r3 : 00000000 r2 : 0000001c r1 : c0657b90 r0 : 00000000 [ 422.524810] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel [ 422.532440] Control: 10c5387d Table: 8791c019 DAC: 00000015 [ 422.538421] Process kworker/u:1 (pid: 8, stack limit = 0xc784a2f0) [ 422.544891] Stack: (0xc784bec8 to 0xc784c000) [ 422.549438] bec0: c7925184 c7a459c8 c7817740 c7a459c0 c7a459c8 c7814200 [ 422.557983] bee0: c784bf04 c784bef0 c0231a70 c0231804 c068ad0c c7a459c8 c784bf4c c784bf08 [ 422.566497] bf00: c006106c c0231a64 c003be60 c0038d14 c7817740 c7a459c8 c7817740 00000012 [ 422.575042] bf20: c784bf3c c784bf30 c003bec0 c7817740 c7a459c8 c7817740 00000000 c7814205 [ 422.583587] bf40: c784bf84 c784bf50 c005412c c0060ff4 c0054c3c 00000000 00000000 c7817740 [ 422.592132] bf60: c069d8e8 00000089 c784a000 c7817750 c069d8e8 c069d8e8 c784bfbc c784bf88 [ 422.600677] bf80: c0054e38 c0054018 c782bed8 c7817750 c0054cc4 c784bfcc c782bed8 c7817740 [ 422.609191] bfa0: c0054cc4 00000000 00000000 00000000 c784bff4 c784bfc0 c005a194 c0054cd0 [ 422.617736] bfc0: c782bed8 00000000 c7817740 00000000 c784bfd0 c784bfd0 c782bed8 c005a100 [ 422.626281] bfe0: c00438f4 00000013 00000000 c784bff8 c00438f4 c005a10c 000eed10 b0990345 [ 422.634796] Backtrace:
静观世界风云 2013-04-25
  • 打赏
  • 举报
回复
引用 4 楼 bzw73 的回复:
这个很简单吗,就是你的machine部分,与你在板端注册的一些名字对应不上,在执行到probe时候出错了,并不是I2C注册问题,你的设备已经注册上去了。只是声卡注册不成功
bzw73, 我和你同感, 这个是音频驱动程序里的名字:有两个地方 static struct i2c_driver tlv320aic23_i2c_driver = { .driver = { .name = "tlv320aic23-codec", }, .probe = tlv320aic23_codec_probe, .remove = __exit_p(tlv320aic23_i2c_remove), .id_table = tlv320aic23_id, }; static struct snd_soc_dai_driver tlv320aic23_dai = { .name = "tlv320aic23-hifi", .playback = { .stream_name = "Playback", .channels_min = 2, .channels_max = 2, .rates = AIC23_RATES, .formats = AIC23_FORMATS,}, .capture = { .stream_name = "Capture", .channels_min = 2, .channels_max = 2, .rates = AIC23_RATES, .formats = AIC23_FORMATS,}, .ops = &tlv320aic23_dai_ops, }; 这个是和平台相关的,davinci.c static struct snd_soc_card am335x_snd_soc_card = { .name = "AM335X EVM", .dai_link = &am335x_evm_dai, .num_links = 1, }; static struct snd_soc_dai_link am335x_evm_dai = { .name = "TLV320AIC3X", .stream_name = "AIC3X", .cpu_dai_name = "davinci-mcasp.0", //wxj 1---0 .codec_dai_name = "tlv320aic3x-hifi", .codec_name = "tlv320aic3x-codec.3-001b", //wxj 2---1 .platform_name = "davinci-pcm-audio", .init = evm_aic3x_init, .ops = &evm_ops, }; 不知道,I2C注册时,用哪个名字?
静观世界风云 2013-04-25
  • 打赏
  • 举报
回复
static struct pinmux_config i2c2_pin_mux[] = { {"spi0_sclk.i2c2_sda", OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW | AM33XX_PULL_UP | AM33XX_INPUT_EN}, {"spi0_d0.i2c2_scl", OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW | AM33XX_PULL_UP | AM33XX_INPUT_EN}, {NULL, 0}, }; static struct i2c_board_info am335x_i2c_boardinfo2[] = { { I2C_BOARD_INFO("tlv320aic3x", 0x1b), }, }; static void i2c2_init(int evm_id, int profile) { setup_pin_mux(i2c2_pin_mux); omap_register_i2c_bus(3, 400, am335x_i2c_boardinfo2, ARRAY_SIZE(am335x_i2c_boardinfo2)); return; } 是这个吗
静观世界风云 2013-04-25
  • 打赏
  • 举报
回复
static struct i2c_board_info am335x_i2c_boardinfo2[] = { /*wxj for sound*/ { I2C_BOARD_INFO("tlv320aic3x", 0x1b), }, }; static void i2c2_init(int evm_id, int profile) { setup_pin_mux(i2c2_pin_mux); pr_info("---wxj--- i2c2_init(),for tlv320aic3x driver register\n"); omap_register_i2c_bus(3, 400, am335x_i2c_boardinfo2, ARRAY_SIZE(am335x_i2c_boardinfo2)); return; } 挂在:i2c_bus 3上, 从设备tlv320aic3x,0x1b
cclutpk 2013-04-25
  • 打赏
  • 举报
回复
代码没有修改全啊,i2c没有指定是哪个i2c controller,也没有从设备地址
静观世界风云 2013-04-25
  • 打赏
  • 举报
回复
谢谢,bzw73 .codec_name = "tlv320aic3x-codec.3-001b", //2-->1 我会再验证,看是否要再修改。 但是还有个问题。 在I2C的控制上,测试I2C的时钟线,发现没有时钟信号 那么,为什么I2C的时钟线上没有时钟信号呢?
静观世界风云 2013-04-25
  • 打赏
  • 举报
回复
好的,非常非常感谢,我往下再找找看,弄清具体是什么原因?
cclutpk 2013-04-25
  • 打赏
  • 举报
回复
下面看codec是否配置成功,要验证i2c功能了
静观世界风云 2013-04-25
  • 打赏
  • 举报
回复
引用 17 楼 cclutpk 的回复:
应该还没到i2c读写部分,这段话是负责供电的,你电都上了,这些代码没有用 把整个文件里面regulator相关的代码都注释掉,因为你 regulator_bulk_get执行不成功,导致后面regulator函数会有空指针导致系统崩溃
cclutpk 高人啊, 按你说的修改,果然,可以出现device list信息 [ 1.739959] ---wxj---soc-core.c soc_bind_dai_link(), binding TLV320AIC3X at idx 0 [ 1.747802] soc-audio soc-audio.0: find CPU DAI from registered DAIs: dai_name davinci-mcasp.0 [ 1.756835] soc-audio soc-audio.0: CODEC found, so find CODEC DAI from registered DAIs from this CODEC: dai_name davinci-mcasp.0 [ 1.768920] soc-audio soc-audio.0: then find one from the set of registered platforms: platform_name davinci-pcm-audio [ 1.780120] ---wxj---soc-core.c soc_bind_dai_link(),rtd->complete=1, return 1 [ 1.787689] tlv320aic3x-codec 3-001b: ---wxj---tlv320aic3x.c aic3x_probe() [ 1.798645] asoc: tlv320aic3x-hifi <-> davinci-mcasp.0 mapping ok [ 1.807189] ALSA device list: [ 1.810302] #0: AM335X EVM 但是,问题是 /dev/目录下,没有snd目录出现啊,也没有音频设备出现啊?
cclutpk 2013-04-25
  • 打赏
  • 举报
回复
应该还没到i2c读写部分,这段话是负责供电的,你电都上了,这些代码没有用 把整个文件里面regulator相关的代码都注释掉,因为你 regulator_bulk_get执行不成功,导致后面regulator函数会有空指针导致系统崩溃
静观世界风云 2013-04-25
  • 打赏
  • 举报
回复
ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(aic3x->supplies),aic3x->supplies); 返回结果 [ 1.742553] tlv320aic3x-codec 3-001b: Failed to get supply 'IOVDD': -19 [ 1.749511] tlv320aic3x-codec 3-001b: Failed to request supplies: -19
静观世界风云 2013-04-25
  • 打赏
  • 举报
回复
static int aic3x_probe(struct snd_soc_codec *codec) { struct aic3x_priv *aic3x = snd_soc_codec_get_drvdata(codec); int ret, i; INIT_LIST_HEAD(&aic3x->list); aic3x->codec = codec; codec->dapm.idle_bias_off = 1; dev_err(codec->dev, "---wxj---tlv320aic3x.c aic3x_probe()\n", ret); ret = snd_soc_codec_set_cache_io(codec, 8, 8, aic3x->control_type); if (ret != 0) { dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret); return ret; } if (gpio_is_valid(aic3x->gpio_reset) && !aic3x_is_shared_reset(aic3x)) { ret = gpio_request(aic3x->gpio_reset, "tlv320aic3x reset"); if (ret != 0) goto err_gpio; gpio_direction_output(aic3x->gpio_reset, 0); } for (i = 0; i < ARRAY_SIZE(aic3x->supplies); i++) aic3x->supplies[i].supply = aic3x_supply_names[i]; ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(aic3x->supplies), aic3x->supplies); if (ret != 0) { dev_err(codec->dev, "Failed to request supplies: %d\n", ret); goto err_get; } 上面,声卡驱动,红色代码,就是读寄存器,应该会有I2C读写吧。
cclutpk 2013-04-25
  • 打赏
  • 举报
回复
i2c只有读写的时候才有时钟信号,你确定代码是不是有i2c读写了,有的话用示波器从开机就抓一下看看是不是有波形来确定一下到底是不是i2c的问题
加载更多回复(8)

21,616

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧