|
楼主 |
发表于 2014-6-26 13:40:22
|
显示全部楼层
本帖最后由 axw_fae 于 2014-6-26 13:45 编辑
整理一下,目前發現的情況和解決方案,目前使用的是 spi-sun7i.c cb2 a20 spi 驅動:
1. 現出 cpu transfer data time out 的打印
主要原因為 spi-sun7i 並不支持 full 模式。 也就是說若是 808 行- if (tx_buf && rx_buf) {
- spin_lock_irqsave(&aw_spi->lock, flags);
- aw_spi->duplex_flag = FULL_DUPLEX_RX_TX;
- spi_set_bc_wtc(tx_len, 0, base_addr);
- spin_unlock_irqrestore(&aw_spi->lock, flags);
复制代码 成立的話,只要長度 > 一定長就,就會產生這錯誤,並且 spi 接口崩死! 解決方案,就是不能 tx_buf 和 rx_bus 皆成立,一定要有值是 NULL 才行
2. fex 中,若是把 SPI CLOCK 上升到 16Mhz 以上,就會報錯
- max_speed_hz = 16000000 Pass
- max_speed_hz = 16000001 Fail
复制代码 解決方案,按網上的提示,和 a20 datasheet 中的說明, SDC 這 BIT 要使能才能使用高速的 SPI 。故對驅動進行修改
- (1) spi_restore_state 函數中
- reg_val &= ~(SPI_CTL_DDB | SPI_CTL_SS_MASK | SPI_CTL_XCH | SPI_CTL_SSCTL | SPI_CTL_LMTF);
- 下加上一行
- reg_val |= SPI_CTL_MASTER_SDC;
- (2) sun7i_spi_hw_init 函數中
- retrun 0;
- 前加上一行
- spi_set_sample_delay(1, base_addr);
- (3) spi_set_sample_delay 函數中
- reg_val |= on_off;
- 這一句改成
- if(on_off) reg_val |= SPI_CTL_MASTER_SDC;
复制代码 3. FEX 中,若是把 SPI CLOCK 上升 > 24Mhz 時,SPI_CLOCK 會自動以 48Mhz 輸出,目前無解決方案。 |
|