After playing one season for Shepherd University,[3][4][5] Cannon transferred to Virginia State.[6] In the 2015 season, he had 1,183 rushing yards and nine rushing touchdowns to go along with nine receptions for 182 receiving yards and two receiving touchdowns. In the 2016 season, he had 1,214 rushing yards and 18 rushing touchdowns to go along with 18 receptions for 203 receiving yards and two receiving touchdowns. In his last year at Virginia State in 2017, he had 1,638 rushing yards and 17 rushing touchdowns to go along with 21 receptions for 225 receiving yards and three receiving touchdowns.[7]
Cannon was drafted by the New York Jets in the sixth round (204th overall) of the 2018 NFL draft.[9] He became the first player from Virginia State to be drafted since Kelvin Kinney in 1996.[10] He made his NFL debut in the Jets' season-opener against the Detroit Lions. In the 48–17 victory, he had six carries for 15 yards and a six-yard reception.[11] He scored his first professional touchdown in Week 14 against the Buffalo Bills.[12] In his rookie season, he finished with 113 rushing yards and one rushing touchdown to go along with 17 receptions for 144 receiving yards.[13]
Cannon was placed on injured reserve on November 1, 2019.[14] He was waived on August 3, 2020.[15]
On September 2, 2021, Cannon was waived by the Panthers.[17]
Baltimore Ravens
On September 8, 2021, Cannon signed with the Baltimore Ravens.[18] He was waived on September 14, 2021.[19]
San Francisco 49ers
On September 15, 2021, Cannon was claimed off waivers by the San Francisco 49ers.[20] He suffered a concussion in Week 13 and was placed on injured reserve on December 11.[21] He was activated on January 29, 2022.[22]
Tennessee Titans
On March 18, 2022, Cannon signed with the Tennessee Titans.[23] He was released on August 30, 2022, and signed to the practice squad the next day.[24][25] He was promoted to the active roster on September 12, 2022.[26] He suffered a knee injury in Week 2 and was placed on injured reserve on September 21.[27]