As one who just implemented SD Card interface on a project - here is what I would do.
1) Take a look at FatFS - It is Open Source, on the Web and quite easy to understand C code. You can take a look at how it implemented the initialization sequence. Compare this to the SD Card specifications. It will start to make sense.
Or,
2) I understand your reluctance to use the Fat File System, especially when your initial attempt did not work. I too had this idea as a backup plan if I could not get the Fat File System going. Fortunately I found the some FatFs examples that worked (see below). Just think of the interoperability and ease of use if you can examine data easily on a PC directly without some other translation software because you are storing the data on a standard File System.
With this in mind I found that the example posted here works,
Microchip uses FatFS as the basis for their SD Card driver- you can find FatFS buried in their code.
microchipdeveloper.com/harmony:audio-player-lab2
This example shows you how to setup Harmony and the other drivers properly.
Then to get this working you can copy the application code from the example application "sdcard_fat_single_disk" App.c and you will have a working example in a short period of time.
When I had this working it proved that my hardware did indeed work, but this example uses the Harmony Dynamic drivers - this would not work for me in my final application - So I found an example of FatFs using register SPI Calls.
This uses FatFS directly and uses Register based calls to do the SPI (and no interrupts). I was able to quickly understand this implementation and rewire just a few calls to use my Static SPI implementation.
tutorial.cytron.io/2017/09/17/fatfs-for-pic32mxmz/
This tutorial (above) does use a timer for timeouts, but it is written in such a way as to not require the timer, if you never timeout - which was a good assumption for my exact application. Your mileage may vary.
Based on these two examples I was able to get the latest version of FatFs directly from the author, make about 6 changes in his code and I was done.
Hopefully this helps you also. :-)