1) Nepleťte si RS-232 a UART. Jsou to dvě různé věci.
2) SPI i IIC jsou lokální sběrnice. Nemají specifikované elektrické charakteristiky, proto je není možné vyvést mimo DPS – resp. postrádalo by to smysl.
3) Realizovat softwarově USB řadič neznamená „trochu“ kódování, ale hodně kódování – aby to vůbec nějak fungovalo. Aby to fungovalo tak, jak požaduje standard, bude to chtít ještě několikrát tolik kódování. :-)