I'm an embedded engineer and have done a fair bit of firmware work. I come from a mixed electronics and IT background, doing some electronics design and pc coding so this may skew my view slightly.
Being able to read and understand a datasheet is critical. Have a browse through a chip like the Si860x, anything you can't figure out probably points to an area you should improve.
https://www.silabs.com/Support%20Documents/TechnicalDocs/Si860x.pdfYou need to be able to read a circuit diagram. Complex analog electronics knowledge tends not to be important, you can get that explained on the rare occasion that it is required but being able to pull up a schematic and see where a wire is going, what pull-up/downs are on it etc. is very valuable.
I would suggest also doing some general IT courses. As micros get bigger and gruntier they are being used to do more stuff and code size is growing rapidly. As the code size grows into tens of thousands of lines the complexity increases and keeping the code structured and maintainable becomes harder. Fortunately this isn't a new problem, you can pull in lots of solutions from the mainstream programming space but knowing about object-orientated structures and principles, how and when to build in abstraction layers all that good standard programming stuff. Some firmware developers resist this stuff and keep growing their main loop to stupid levels of complexity but I think it is going to get more and more important as the chips grow.