@@ -16,7 +16,7 @@ class SpiMaster extends Module {
1616 })
1717
1818 object State extends ChiselEnum {
19- val idle, tx1, tx2, rx1, rx2 = Value
19+ val start, idle, tx1, tx2, rx1, rx2 = Value
2020 }
2121 import State ._
2222 val state = RegInit (idle)
@@ -25,34 +25,49 @@ class SpiMaster extends Module {
2525 val mosiReg = RegInit (0 .U (8 .W ))
2626 val misoReg = RegInit (0 .U (8 .W ))
2727 val bitsReg = RegInit (0 .U (8 .W ))
28- val cntReg = RegInit (0 .U (8 .W ))
28+ val cntReg = RegInit (0 .U (32 .W ))
29+ val CNT_MAX = 9000 .U
2930
3031
3132 spi.ncs := 1 .U
3233 spi.sclk := x
3334 spi.mosi := mosiReg(7 )
3435 io.dataOut := misoReg
3536
36- val JTAG_ID = 0x9f .U
37+ // val JTAG_ID = 0x90.U
38+ val JTAG_ID = 0xab .U
39+ val RD_STATUS = 0x05 .U
3740 val RDSR = 0x05 .U
3841 val READ = 0x03 .U
3942
4043 switch(state) {
44+ is(start) {
45+ spi.ncs := 1 .U
46+ spi.sclk := 0 .U
47+ cntReg := cntReg + 1 .U
48+ when(cntReg === CNT_MAX ) {
49+ state := idle
50+ cntReg := 0 .U
51+ }
52+ }
4153 is(idle) {
4254 spi.ncs := 1 .U
4355 spi.sclk := 0 .U
44- when(true .B ) {
56+ cntReg := cntReg + 1 .U
57+ when(cntReg === CNT_MAX ) {
58+ // when data is available
4559 state := tx1
4660 bitsReg := 7 .U
4761 cntReg := 0 .U
4862 mosiReg := JTAG_ID
4963 }
64+
5065 }
5166 is(tx1) {
5267 spi.ncs := 0 .U
5368 spi.sclk := 0 .U
5469 cntReg := cntReg + 1 .U
55- when(cntReg === 3 . U ) {
70+ when(cntReg === CNT_MAX ) {
5671 state := tx2
5772 cntReg := 0 .U
5873 }
@@ -61,7 +76,7 @@ class SpiMaster extends Module {
6176 spi.ncs := 0 .U
6277 spi.sclk := 1 .U
6378 cntReg := cntReg + 1 .U
64- when(cntReg === 3 . U ) {
79+ when(cntReg === CNT_MAX ) {
6580 state := tx1
6681 cntReg := 0 .U
6782 mosiReg := mosiReg(6 , 0 ) ## 0 .U // io.dataIn(7))
@@ -75,7 +90,7 @@ class SpiMaster extends Module {
7590 spi.ncs := 0 .U
7691 spi.sclk := 0 .U
7792 cntReg := cntReg + 1 .U
78- when(cntReg === 3 . U ) {
93+ when(cntReg === CNT_MAX ) {
7994 state := rx2
8095 cntReg := 0 .U
8196 bitsReg := bitsReg - 1 .U
@@ -88,7 +103,7 @@ class SpiMaster extends Module {
88103 spi.ncs := 0 .U
89104 spi.sclk := 1 .U
90105 cntReg := cntReg + 1 .U
91- when(cntReg === 3 . U ) {
106+ when(cntReg === CNT_MAX ) {
92107 state := rx1
93108 cntReg := 0 .U
94109 bitsReg := bitsReg - 1 .U
0 commit comments