1、目前只支持UHS-I,所以以下为支持的模式
2、linux中的配置
Default Speed:
(1)需要配置sdhci-caps-mask,这是一个64bit的值,可以屏蔽掉对应于cps和cps1中的bit
即SDHCI_CAPABILITIES对应SRS16和SDHCI_CAPABILITIES_1对应SRS17
上图中的0x7对应的是SRS17寄存器中的bit0~2
由于软件是通过读寄存器来确认控制器是否支持某种功能的,所以为了降低速率,需要把高级别的数据均屏蔽掉
(2)需要配置哪些寄存器
1)配置频率25MHz、位宽4bit,3.3V电压
2)配置SRS15.V18SE为0
3)发送CMD6,参数里面带上对应模式参数
bit31为1,选择组1,值为0即可,如果正常说明配置成功
注意:从上图可以看出Default speed和SDR12是一样的,只是电压不一样而已
4)SRS10.HSE写0
High Speed:
1)配置频率25MHz、位宽4bit,3.3V电压
2)配置SRS15.V18SE为0
3)发送CMD6,参数里面带上对应模式参数
bit31为1,选择组1,值为1即可,如果正常说明配置成功
4)SRS10.HSE写1
SDR12:
dtb修改:把上图的cap-sd-highspeed修改为sd-uhs-sdr12;即可
1)配置频率25MHz、位宽4bit,1.8V电压
2)配置SRS15.V18SE为1
3)发送CMD6,参数里面带上对应模式参数
bit31为1,选择组1,值为0即可,如果正常说明配置成功
4)SRS10.HSE写0
5)配置SRS15.UMS为0
SDR25:
dtb添加:sd-uhs-sdr25;即可
1)配置频率50MHz、位宽4bit,1.8V电压
2)配置SRS15.V18SE为1
3)发送CMD6,参数里面带上对应模式参数
bit31为1,选择组1,值为1即可,如果正常说明配置成功
4)SRS10.HSE写1
5)配置SRS15.UMS为1
SDR50:
1)配置频率100MHz、位宽4bit,1.8V电压
2)配置SRS15.V18SE为1
3)发送CMD6,参数里面带上对应模式参数
bit31为1,选择组1,值为2即可,如果正常说明配置成功
4)SRS10.HSE写1
5)配置SRS15.UMS为2
SDR104:
1)配置频率208MHz、位宽4bit,1.8V电压
2)配置SRS15.V18SE为1
3)发送CMD6,参数里面带上对应模式参数
bit31为1,选择组1,值为3即可,如果正常说明配置成功
4)SRS10.HSE写1
5)配置SRS15.UMS为3
DDR50:
1)配置频率50MHz、位宽4bit,1.8V电压
2)配置SRS15.V18SE为1
3)发送CMD6,参数里面带上对应模式参数
bit31为1,选择组1,值为4即可,如果正常说明配置成功
4)SRS10.HSE写1
5)配置SRS15.UMS为4
3、如何修改clk
(1)写SRS11.SDCE的值为0,关闭sd clk
(2)读SRS16.BCSDCLK,获取base clk,默认值为c8,即200M
(3)计算N的值,sdclk=baseclk/2N,把N写到SRS11.SDCFSL寄存器中
(4)操作HRS09 复位phy,等待phy完成复位
(5)写SRS11.SDCE的值为1,打开sd clk
4、如何修改bus
(1)关中断,SRS13.CINT_SE
(2)发送ACMD6,参数0代表1bit,2代表4bit,收到resp说明发送成功
(3)SRS10.DTW为1,SRS10.EDTW为0
5、如何修改电压
(1)SRS10.BP写0
(2)判断SRS16.VS18 VS30 VS33是否支持
(3)配置SRS10.BVS,选择对应的电压,同时打开SRS10.BP