30天自制操作系统吧 关注:1,380贴子:4,756
  • 10回复贴,共1

PCI ES1371声卡终于调试出声音来了。

只看楼主收藏回复

调试ES1371声卡的现场图:

ES1371(1373)声卡图:

历史回顾
当时选择ES371声卡的缘由:
1,是因为它属于32bit的PCI总线下的设备,也是学习PCI设备的必须要掌握的一步。
2,VMware虚拟机对应ES1371声卡,便于脱离实际设备,专心调试程序。
3,关键是在网上看到《编写基于VMware5的声卡驱动》,作者:张立殷。
这篇文章是PDF格式,可以下载。
《编写基于VMware5的声卡驱动》比较简略,但对学习过《30日自制OS》的朋友
来讲,一定会心领神会,知道作者在讲什么。我按照该文的步骤,还下载了
《ES1371 datasheet》,终因遇到种种本人水平无法克服的困难,放弃改用同样是
PCI的CMI8738声卡。
花了功夫而没有结果,终究很难受。重新鼓起勇气,再挑战一次。在完成了声卡
初始化,装载音频文件,设置音量,起动声卡,声卡中断响应,DMA输出数据位置
寄存器也正常计数中工作。但结果就是没有声音。最令人颓丧的就是遇到这种情况。
突然想到还有一个AC97 Codec 部分一直不曾注意(CMI8738就不用关心AC97),
《编写基于VMware5的声卡驱动》文章里也没有提到,只提到要作AC97 Codec的
RESET。仔细阅读AC97 Codec 规范书,看到其中Audio Regster中也有音量参数。
我查看一下,我的ES1371声卡中寄存器参数是0x8000,其中bit15这个参数值,恰
恰是静音位! 所以设置0x8000,或0x0000都是无声的。于是我改设0x0800值,写
入左右声道寄存器里。好了,喇叭里终于传出叽里咕噜的声音来了。有点像《猎字
99号》电影中的发送高速电报的声音。接下来就好办了,选择不同采样频率的音频
文件验证,最后确认48000Hz才是默认的采样频率。大功告成。
还存在的问题:
1,目前只对应48000Hz采样频率。其他采样频率还需要修改不知道哪里的某个控制
寄存器里的参数。
2,拿到VMware上面试运行,还是没有声音。因为写进去的音量值,不被VMware认
识。怎么并非一 一对应啊?
就这样了,实际ES1371声卡已经正常发声了,先保存好程序。
06.08.


IP属地:上海1楼2024-06-08 19:48回复
    加油加油


    IP属地:河北来自Android客户端2楼2024-06-08 20:02
    回复
      大佬您好,刚开始学习有些疑问,冒昧向您问一下。30day是在QEMU运行的,若是在嵌入式设备或者64bit的电脑运行的话,该怎么运行纸娃娃呢?还是要用QEMU吗


      IP属地:广东3楼2024-06-10 19:03
      收起回复
        “1,目前只对应48000Hz采样频率。其他采样频率还需要修改不知道哪里的某个控制
        寄存器里的参数”
        这个问题也解决了。是程序中有一个小bug,造成声卡不理解,不明白我给它的设置
        参数值的意义,于是它就自动用默认值48000Hz应对了。现在可以使用8000Hz~48000Hz
        范围内的采样频率。


        IP属地:上海4楼2024-06-10 21:35
        回复
          来支持一下,加油


          IP属地:安徽5楼2024-06-13 14:59
          回复
            花了一些功夫,现在VMware10上面也能用虚拟的ES1371声卡发声了。
            此前,硬件ES1371声卡能够正常使用,但在VMware10上面是没有声音。
            原因:
            1,程序设置中还有BUG,也就是设置的数值没有写进去。如果是硬件
            声卡的情况下,硬件声卡内部会用默认的数值。而虚拟声卡则没有那么
            好运气。没有写进去,那就是0值。
            2,虚拟声卡中的某些音量寄存器,也会遇到无论如何都写不进去的情况。
            实际上是暗示用户一一虚拟声卡并没有配备这项虚拟功能。
            3,PCI ES1371声卡有版本号,我手头上的硬件ES1371声卡版本号低于
            VMware10上面的版本号。里面肯定是有差异的,还有要对PCI里面的一
            些命令进行设置。一般来说是不对PCI设备的配置空间进行设置的,只是
            作读出的操作,这种情况也是第一次遇到。
            这一步也是很关键的,缺少这一步,就是无声。
            4,AC97 CODEC的音量寄存器。在硬件声卡上可设置左右声道的音量。
            在虚拟声卡,如果照样设置也是无声的,但若只设置右声道音量,左声道
            设置0,就能发声。遇到不少奇奇怪怪的事情,也是偶尔运气发现的。
            在ES1371声卡上,瞎搞了这么多时间,总算没有半途而废。
            06.15


            IP属地:上海6楼2024-06-15 23:03
            回复
              es1371应该是ac97标准下的一个具体芯片,所以应该还是要按照ac97标准操作吧,可能比起标准会有一些额外的功能?


              IP属地:浙江来自Android客户端7楼2024-06-17 10:18
              收起回复